zoukankan      html  css  js  c++  java
  • xmpp学习笔记(一)

     自己学习xmpp官方文档,慢慢整理的笔记,不见得都是正确的,请用选择性眼光看待,也有问题尚未解决,持续更新中~~~

     

     

     

    创建新工程,命名为XMPPIOS.

     

     

     

    一:导入XMPPFramework

     

     

    将XMPP拖拽到工程中。

     

    添加静态库

     

     

     

     

    并在Build Settings中设置如下

     

     

     

     

    此时Run一下,成功,证明导入正确。

    注意:XMPP使用了ARC,Edit -> Refactor -> convert to Objective-C ARC,转换。

    头文件也可以自己创建,内容是需要import的头文件,可以根据自己的需求来确定。

    ------------------------------------------------可爱的分界线------------------------------------------------------------------

     

     

    :连接和注册 XEP-0077  XEP-0020

     

     

     

     

    拖拽相应控件到页面中。

    在appdelegate.h中创建相应属性

     

    .m

     

    这里创建xmpp的地方比官方的demo少了很多,主要是因为开始使用的时候个人认为并不用那么多变量,之后会一点一点添加。

    添加创建连接方法

     

    创建连接成功后,两个代理方法调用,分别为

    - (void)xmppStreamWillConnect:(XMPPStream *)sender

    - (void)xmppStreamDidConnect:(XMPPStream *)sender

    此时添加注册的代码

     

    如果注册成功,调用如下代理方法

    - (void)xmppStreamDidRegister:(XMPPStream *)sender

    现在看看后台openfire中已经存在注册的用户了。

    如果没有注册成功则调用

    - (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error

    如果发现如下错误

    <iq xmlns="jabber:client" type="error" to="saas.kanyabao.com/213e75ed"><query xmlns="jabber:iq:register"><username>dawn</username><password>1111</password></query><error code="409" type="cancel"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

    则是因为当前的用户已经存在。

    然后在- (void)xmppStreamDidRegister:(XMPPStream *)sender

     

     

     

     

     

    为当前用户做认证,如果认证成功,则调用

    - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender

    否则调用

    - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error

    此时,当前用户已经与后台openfire连接,但是在openfire中,当前用的状态是未登录状态,所以此时,当前用户发送状态告知后台,这样其他的用户才能收到当前用户的上线通知。

    所以,在

    - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender

    方法中添加如下代码

        XMPPPresence *presence = [XMPPPresencepresence];

    [[self xmppStream] sendElement:presence];

    再次run,刷新open fire  发现当前用户的状态已经是上线了

     

    注意:注册之前要创建连接,否则会报"Please wait until the stream is connected"的错误

                连接或者注册后需要做一次认证,并发送一个上线的消息,否则后台和其他用户都无法收到当前用户的上线消息,后台openfire中看到的当前用户是灰色的离线状态。

                注册之后如果要再次建立连接,最好断开后再创建,否则会报"Attempting to connect while already connected or connecting"的错误。

     

  • 相关阅读:
    Bootstrap中,模态框嵌套模态框时,关闭第二个模态框时,导致第一个模态框的滚动条消失
    heidisql 远程登录本地虚拟机中的 MariaDB
    ssh-keygen -t rsa -C "content" 解释
    IIS 环境 CodeIgniter 隐藏 URL 中的 index.php
    Windows 环境下 PHP 安装 xdebug 及配置
    win10 更新后主机背部音频输出无声音
    MySql.Data.MySqlClient.MySqlException: Packets larger than max_allowed_packet are not allowed
    关于 IIS 中 iconfont.woff 报 404(Not Found) 的原因即解决方法
    IIS Web API 长时间不连接后第一次访问非常缓慢
    VS Code 中 HTML 文档注释 js 语句异常
  • 原文地址:https://www.cnblogs.com/PhenixWang/p/3275454.html
Copyright © 2011-2022 走看看