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

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

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

xmpp的使用

1、创建xmppStream

  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、连接服务器

  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、得到服务器相应后回调方法

  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]利用此方法发送密码到服务器完成登陆)

  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服务器中的设置不一样时,就会导致此错误,虽然我们用一些第三方客户端时一样能登陆成功

  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中的设置

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

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

  1. XMPP 常见错误:<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>

    一般登陆/注册 出错,会在认证失败这里打印出error信息 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLEleme ...

  2. XMPP 常见错误:(<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-autho

    1检查jid XMPP认证的问题,一般都是与JID有关的,因此解决这类问题,首选的入口就是分析一下XMPPStream的JID,客户端在与服务器连接后,Socket就绑定了这个端口,用来处理与服务器的 ...

  3. iOS开发过程中常见错误问题及解决方案

    错误原因:ld: x duplicate symbol for architecture x86_64 clang: error: linker command failed with exit co ...

  4. xmpp 常见错误 一

    #pragma mark - 密码错误,身份验证失败 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement ...

  5. xmpp笔记2(客户端到服务器的例子)--xml

    xmpp( 客户端到服务器的例子 ) 1 步:客户端初始流给服务器: <stream:stream xmlns='jabber:client' xmlns:stream='http://ethe ...

  6. ios开发——错误总结篇&开发中常见错误和警告总结(四)

    ios开发——开发总结&开发中常见错误和警告总结(四) 网易彩票实战总结(错误) 错误总结之类的实现 经典错误之重复定义与导入错误 经典错误关于父类的实现 通知对象: 控制器的定义 Xcode ...

  7. iOS开发总结-Xcode常见错误

    iOS开发总结-Xcode常见错误 "file/file.h"filenotfound 如果遇到这种类型的问题报错,可以分为三部来解决,由简到复杂一步一步来,直到解决问题位置. 1 ...

  8. 李洪强iOS开发之OC常见错误汇总

    // //  main.m //  16 - 常见错误汇总 // //  Created by vic fan on 16/7/13. //  Copyright © 2016年 李洪强. All r ...

  9. Android NDK 开发(三)--常见错误锦集合Log的使用【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误, ...

随机推荐

  1. idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class

    idea中使用scala运行spark出现: Exception in thread "main" java.lang.NoClassDefFoundError: scala/co ...

  2. 提供基于Lesktop的IM二次开发,联系QQ:87172811

    提供基于Lesktop的IM二次开发,联系QQ:87172811

  3. Teclast/台电 P98HD四核测评9.7寸台电P98HD 评测体验 (转载)

    自从苹果新iPad上市推出后,拥有Retina高清屏幕分辨率的平板让我们的视线一下子变得“清晰”起来,超高2048x1536分辨率也成为厂商们追捧的对象,在经历了双核时代配备高清分辨率对于硬件性能承载 ...

  4. # void :;

    href="#"---->top 连续点击的时候会出bug javascri中的void是一个操作符,该操作符指定要计算一个表达式但是不返回值. javascript:voi ...

  5. viewpager的layout_width="wrap_content"无效问题

    在viewpager当中直接使用layout_width="wrap_content"是无效的,扩展了一下.解决这个问题. package com.soulagou.ui; imp ...

  6. 【企业库6】【日志应用程序块】实验2:创建和使用异步Trace Listener

    Lab 2: Create and Use an Asynchronous Trace Listener 实验2:创建和使用异步Trace Listener In this lab, you will ...

  7. 利用jQuery获取数据,JSONP

    最近工作用到了跨域请求,所以此文就有了,概念网上都有,就不细说了,直接来了. 看了一篇文章,说的是通过扩展让ASP.NET Web API支持JSONP,jsonp网上有很多的教程,js代码部分基本和 ...

  8. C++学习之虚继承

    http://blog.csdn.net/wangxingbao4227/article/details/6772579 C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同 ...

  9. BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会( dp + dfs )

    选取任意一个点为root , size[ x ] 表示以 x 为根的子树的奶牛数 , dp一次计算出size[ ] && 选 root 为集会地点的不方便程度 . 考虑集会地点由 x ...

  10. Python网络编程——修改套接字发送和接收的缓冲区大小

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...