iOS开发——网络编程OC篇&(二)XMPP实现用户登录与注销

登录:


 

步骤:
 * 在AppDelegate实现登录

  •  1. 初始化XMPPStream
  •  2. 连接到服务器[传一个JID]
  •  3. 连接到服务成功后,再发送密码授权
  •  4. 授权成功后,发送"在线" 消息

 

一:导入框架,根据上一篇文章的说明去导入相应的库与文件

二:定义一个XMPP的成员变量

 1 @interface AppDelegate ()<XMPPStreamDelegate>{ 2 XMPPStream *_xmppStream; 3 }

三:按步骤在代理方法中声明四个需要实现的方法

复制代码
 1 // 1. 初始化XMPPStream
 2 -(void)setupXMPPStream;
 3 
 4 
 5 // 2.连接到服务器
 6 -(void)connectToHost;
 7 
 8 // 3.连接到服务成功后,再发送密码授权
 9 -(void)sendPwdToHost;
10 
11 
12 // 4.授权成功后,发送"在线" 消息
13 -(void)sendOnlineToHost;
复制代码
 四:在程序启动的时候调用链接服务器主机的方法
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2     
3     // 程序一启动就连接到主机
4     [self connectToHost];
5     return YES;
6 }

链接服务器主机方法的实现,在链接服务器主机方法中,如果链接成功则初始化XMPPStream

复制代码
 1 #pragma mark 连接到服务器
 2 -(void)connectToHost{
 3     NSLog(@"开始连接到服务器");
 4     if (!_xmppStream) {
 5         [self setupXMPPStream];
 6     }
 7     
 8     
 9     // 设置登录用户JID
10     //resource 标识用户登录的客户端 iphone android
11     
12     XMPPJID *myJID = [XMPPJID jidWithUser:@"wangwu" domain:@"teacher.local" resource:@"iphone" ];
13     _xmppStream.myJID = myJID;
14 
15     // 设置服务器域名
16     _xmppStream.hostName = @"teacher.local";//不仅可以是域名,还可是IP地址
17     
18     // 设置端口 如果服务器端口是5222,可以省略
19     _xmppStream.hostPort = 5222;
20     
21     // 连接
22     NSError *err = nil;
23     if(![_xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&err]){
24         NSLog(@"%@",err);
25     }
26     
27 }
复制代码

与主机连接的代理方法

复制代码
 1 #pragma mark -XMPPStream的代理
 2 #pragma mark 与主机连接成功
 3 -(void)xmppStreamDidConnect:(XMPPStream *)sender{
 4     NSLog(@"与主机连接成功");
 5     
 6     // 主机连接成功后,发送密码进行授权
 7     [self sendPwdToHost];
 8 }
 9 #pragma mark  与主机断开连接
10 -(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
11     // 如果有错误,代表连接失败
12     NSLog(@"与主机断开连接 %@",error);
13         
14 }
复制代码

 

初始化XMPPStream方法的实现

复制代码
1 #pragma mark  -私有方法
2 #pragma mark 初始化XMPPStream
3 -(void)setupXMPPStream{
4     
5     _xmppStream = [[XMPPStream alloc] init];
6     
7     // 设置代理
8     [_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
9 }
复制代码

五:发送密码授权

复制代码
1 #pragma mark 连接到服务成功后,再发送密码授权
2 -(void)sendPwdToHost{
3     NSLog(@"再发送密码授权");
4     NSError *err = nil;
5     [_xmppStream authenticateWithPassword:@"123456" error:&err];
6     if (err) {
7         NSLog(@"%@",err);
8     }
9 }
复制代码

六:授权成功后,发送状态消息

复制代码
 1 #pragma mark  授权成功后,发送"在线" 消息
 2 -(void)sendOnlineToHost{
 3     
 4     NSLog(@"发送 在线 消息");
 5     XMPPPresence *presence = [XMPPPresence presence];
 6     NSLog(@"%@",presence);
 7     
 8     [_xmppStream sendElement:presence];
 9     
10     
11 }
复制代码

七:授权成功与失败的代理方法

复制代码
 1 #pragma mark 授权成功
 2 -(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{
 3     NSLog(@"授权成功");
 4     
 5     [self sendOnlineToHost];
 6 }
 7 
 8 
 9 #pragma mark 授权失败
10 -(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{
11      NSLog(@"授权失败 %@",error);
12 }
复制代码

注销

 

一:在代理中定义并且实现一个注销的方法

 1 // 注销 2 -(void)logout; 

复制代码
1 #pragma mark -公共方法
2 -(void)logout{
3     // 1." 发送 "离线" 消息"
4     XMPPPresence *offline = [XMPPPresence presenceWithType:@"unavailable"];
5     [_xmppStream sendElement:offline];
6     
7     // 2. 与服务器断开连接
8     [_xmppStream disconnect];
9 }
复制代码

二:实现注销--这里我们只实现点击屏幕就注销并且推出

1 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
2     // 做注销
3     AppDelegate *app = [UIApplication sharedApplication].delegate;
4     [app logout];
5     
6 }
posted @ 2016-07-08 17:07  ekhome  阅读(303)  评论(0编辑  收藏  举报