iOS实现XMPP通讯(二)XMPP编程

这是一个可以登录jabber账号,获取好友列表,并且能与好友进行聊天的项目。
使用的是第三方库XMPPFramework框架来实现XMPP通讯
项目地址:XMPP-Project

项目准备工作:搭建好Openfire服务器,安装客户端Spark,具体步骤请见:iOS实现XMPP通讯(一)搭建Openfire
这样就可以登录本项目与登录Spark的另一用户进行XMPP通讯。

项目结构概述:
有三个视图控制器LoginViewController,ListViewController,ChatViewController
LoginViewController:登录和注册xmpp账号界面
ListViewController:获取花名册(好友列表)界面
ChatViewController:和好友进行单聊界面
为此封装了XmppManager类,方便统一管理与服务器的连接、好友列表回调、聊天消息回调等代理方法。

注意:由于XMPPFramework框架还依赖其他第三方库,如KissXML、CocoaAsyncSocket等,因此用cocoaPods添加XMPPFramework库时,podfile必须添加use_frameworks!,如下:

platform:ios , '8.0' target 'XMPP' do use_frameworks! pod 'XMPPFramework', '~> 4.0.0' end 注册登录

xmpp的登录流程是:先连接xmpp服务器,连接成功后再进行登录的鉴权,即校验密码的准确性。
xmpp的注册流程是:先连接xmpp服务器,连接成功后再向xmpp服务器注册账号、密码。
XmppManager类提供一个连接xmpp服务器的方法,当点击LoginViewController的"注册"和"登录"按钮时调用该方法。(备注:islogin用来区分是登录还是注册),该方法如下:

//服务器地址(改成自己电脑的IP地址) #define HOST @"192.168.2.2" //端口号 #define KPort 5222 -(void)connectHost:(NSString *)usernameStr andPassword:(NSString *)passwordStr andisLogin:(BOOL)islogin{ self.usernameStr = usernameStr; self.pswStr = passwordStr; self.isLogin = islogin; //判断当前没有连接服务器,如果连接了就断开连接 if ([self.xmppStream isConnected]) { [self.xmppStream disconnect]; } //设置服务器地址 [self.xmppStream setHostName:HOST]; //设置端口号 [self.xmppStream setHostPort:KPort]; //设置JID账号 XMPPJID *jid = [XMPPJID jidWithUser:self.usernameStr domain:HOST resource:nil]; [self.xmppStream setMyJID:jid]; //连接服务器 NSError *error = nil; //该方法返回了bool值,可以作为判断是否连接成功,如果10s内顺利连接上服务器返回yes if ([self.xmppStream connectWithTimeout:10.0f error:&error]) { NSLog(@"连接成功"); } //如果连接服务器超过10s钟 if (error) { NSLog(@"error = %@",error); } }

HOST是Openfire后台服务器的主机名,我们在Openfire后台服务器中配置了主机名为127.0.0.1,让电脑充当Openfire服务器,因此HOST的值为我电脑网络的IP地址192.168.2.2。
Openfire后台服务器配置的客户端连接端口默认是5222,因此这里KPort的值设为5222。后台配置如下:

iOS实现XMPP通讯(二)XMPP编程

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgywxy.html