)" /> ) - 秒客网" />

iOS XMPP之常见错误一:()

时间:2023-11-13 12:44:50

在XMPP开发中,使用XMPPStream进行连接服务器后,验证过程中,比较常见的一个错误是

<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>.

尤其作为初学者(笔者就是这样的),经常会因为这个问题浪费不少时间。

xmpp的使用

1、创建xmppStream

[objc] view plaincopy
  1. - (void)setupXmppStream
  2. {
  3. // 1. 实例化
  4. _xmppStream = [[XMPPStream alloc] init];
  5. [_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
  6. }

2、连接服务器

[objc] view plaincopy
  1. - (void)connect
  2. {
  3. // 1. 实例化XMPPStream
  4. [self setupXmppStream];
  5. NSString *hostName = @"sky.local";
  6. //    NSString *hostName = @"127.0.0.1";
  7. NSString *userName = @"zhaoliu";
  8. // 设置XMPPStream的hostName&JID
  9. _xmppStream.hostName = hostName;
  10. _xmppStream.myJID = [XMPPJID jidWithUser:userName domain:hostName resource:nil];
  11. // 连接
  12. NSError *error = nil;
  13. if (![_xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) {
  14. NSLog(@"%@", error.localizedDescription);
  15. } else {
  16. NSLog(@"发送连接请求成功");
  17. }
  18. }

3、得到服务器相应后回调方法

[objc] view plaincopy
  1. #pragma mark - XMPPStream协议代理方法
  2. #pragma mark 完成连接
  3. - (void)xmppStreamDidConnect:(XMPPStream *)sender
  4. {
  5. NSLog(@"success userName = %@, myJID = %@",sender.myJID.user, sender.myJID);
  6. // 登录到服务器,将用户密码发送到服务器验证身份
  7. NSString *password = @"123";
  8. [_xmppStream authenticateWithPassword:password error:nil];
  9. }
  10. #pragma mark 断开连接
  11. - (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error
  12. {
  13. NSLog(@"断开连接");
  14. }

4、登陆信息回调方法(即:[_xmppStream authenticateWithPassword:password error:nil]利用此方法发送密码到服务器完成登陆)

[objc] view plaincopy
  1. #pragma mark 身份验证成功
  2. - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
  3. {
  4. NSLog(@"身份验证成功!");
  5. }
  6. #pragma mark 用户名或者密码错误
  7. - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error
  8. {
  9. NSLog(@"用户名或者密码错误 error = %@",error);
  10. }

此时如果代码中的domain与openfire服务器中的设置不一样时,就会导致此错误,虽然我们用一些第三方客户端时一样能登陆成功

[objc] view plaincopy
  1. NSString *hostName = @"sky.local";
  2. NSString *hostName = @"127.0.0.1";

当我用adium、spark等第三方软件时,上面的两个都可以登陆成功。但是用代码时,则第一个就会<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>报错。提示没有注册、从登陆成功。原因是第一个设置与我opnefire服务器中的设置不一样导致。

下面看一下我openfire中的设置

iOS XMPP之常见错误一:(<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>)

http://blog.csdn.net/sky_2016/article/details/40278661