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 }
本博客,专属!本博文由博主独立编写或者借鉴别人的好文章进行修改而成,如果不对的地方望指正,谢谢!