- 需要在本地配置好openfire服务器
将XMPP框架拖入工程,一拖入就编译的话是会报错的,需要配置一下
- 配置一些东西
1:添加libxml2.tab框架
2:在Build Settings 里面搜索 other Linker Flags 添加- lxml2
3:还是在Build Settings 里面搜索 Header Search Paths 里面添加 /usr/include/libxml2
4:添加libresolv.tab 框架
5:添加一个PCH文件 名字随意
6:在Build Settings 里面搜索 prefix 配置PCH路径 路径格式是:工程名/PCH名
7:在pch文件里面导入 #import <UIKit/UIKit.h> 编译发现还有一个错误,点击错误将错误的那一行注释掉就是了,再编译就没问题了
接下来新建几个实体文件夹 分别是 登录模块 注册模块 好友模块 聊天模块
- 考虑到登录 注册 等最好封装为一个类让外界直接使用就好了,所以创建一个专门放置工具类的文件夹,先在里面创建一个继承自NSObject的类 名字随意
- 今天登录注册用到的XMPPStreamDelegate代理方法
XMPP的登录,注册主要就是在这些代理方法里面写代码
在连接服务器成功以后的代理方法
- (void)xmppStreamDidConnect:(XMPPStream *)sender;
在连接服务器失败以后的代理方法
- (void)xmppStreamConnectDidTimeout:(XMPPStream *)sender;
密码验证成功的代理方法,肯定是要在连接了服务器以后才能验证密码的了
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender;
密码验证失败的代理方法
- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error;
注册成功的代理方法 注册也得是在连接了服务器以后才能进行
- (void)xmppStreamDidRegister:(XMPPStream *)sender
注册失败的代理方法
- (void)xmppStream:(XMPPStream *)sender didNotRegister:(DDXMLElement *)error
开始撸代码
- 首先在XMPPManager类里面先导入XMPP框架,再创建单例方法,登录方法,注册方法,注销方法 还需要遵守XMPPStreamDelegate协议,并且定义一个XMPPStream属性暴露在.h文件中
- 下面就是头文件的所有代码,今天只记录登录,注册,以及注销
接下来到.m里面实现这些方法
因为我们要在代理方法里面获取到登录或者注册时的用户名与密码,所以需要用属性记录下来,在XMPPManager里面添加一个扩展,扩展里面添加用户名与密码属性,并且因为不管是登录还是注册都需要验证密码,并且都是在连接服务器成功的代理方法里面分别调用登录/注册的密码验证方法,所以 最好定义一个枚举值来表示是要登录还是注册
1:定义枚举以及添加扩展,在扩展里面添加 用户名,密码,区别登录还是注册属性
- 2:实现单例方法 单例的写法有好几种,并且差不多都是统一的格式
- 3 重写init初始化方法因为要在外界一调用单例方法的时候就已经建立好通信管道(XMPPStream),在这个方法里面只要初始化XMPPStream,以及配置好服务器地址,端口,以及设置代理人就行(不要忘记遵守XMPPStreamDelegate协议)
- 4 因为连接服务器的步骤多个地方都需要用到,所以专门抽取一个方法来连接服务器,这个方法需要做的事情是,先判断当前是否是处于连接的状态,如果是则先让它与服务器断开连接,然后在发送连接的消息给服务器,并且实现注销的方法,因为连接服务器的时候需要用到
- 5 准备工作做好了,开始实现登陆方法,登陆需要实现的是先创建一个XMPPJID(类似于用户名吧),再把JID与通信管道绑定,调用连接服务器的方法,给用户名,密码属性等赋值 接着就看是否连接成功了,连接成功会走连接成功的方法,失败则走失败的方法(废话),假设连接成功了则在成功的的方法里面调用验证密码的方法,此时也是两个状态,要么密码验证成功,要么失败!假设成功,则向服务器发送上线的消息,这时我们在openfire里面就能看到我们登陆的用户的在线状态了,说白了这写都是在XMPP提供的各种状态代理方法里面写一点代码就好了
登陆就算是做完了,当然了这是很不完整的,比如我们要在登陆成功以后将用户名和密码存储起来,这样下次就不需要再次登陆了,并且登陆成功以后需要调整到主界面了,这里并没有做
6 注册 注册的步骤跟登陆差不多,同样是创建一个XMPPJID 然后连接服务器,看服务器是否连接成功,成功则验证密码,密码验证成功以后,则注册成功了.也是有两个代理方法 需要完善的是,要判断用户是否存在了,存在则不允许注册,不过这里也没有做判断
- 这些方法实现了只需要在对应的控制器中调用即可 真正开发来说,在登陆成功以后应该发出一个通知切换控制器,并且保存下用户名以及密码,这样下次就不需要再进行登陆了