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

 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 }

 

 

 

 

你可能感兴趣的:(ios开发)