标签:
登录:
步骤:
* 在AppDelegate实现登录
一:导入框架,根据上一篇文章的说明去导入相应的库与文件
二:定义一个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 }
iOS开发——网络编程OC篇&(二)XMPP实现用户登录与注销
标签:
原文地址:http://www.cnblogs.com/stronger-ios-lcx/p/5654031.html