• 【iOS XMPP】使用XMPPFramewok(五):好友列表


    转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/17/3082226.html

    好友列表

    好友列表,在 XMPP 中被称为 roster,花名册?

    获取 roster 需要客户端发送 <iq /> 标签向 XMPP 服务器端查询

    一个 IQ 请求:

    <iq type="get"

      from="xiaoming@example.com"

      to="example.com"

      id="1234567">

      <query xmlns="jabber:iq:roster"/>

    <iq />

    type 属性,说明了该 iq 的类型为 get,与 HTTP 类似,向服务器端请求信息

    from 属性,消息来源,这里是你的 JID

    to 属性,消息目标,这里是服务器域名

    id 属性,标记该请求 ID,当服务器处理完毕请求 get 类型的 iq 后,响应的 result 类型 iq 的 ID 与 请求 iq 的 ID 相同

    <query xmlns="jabber:iq:roster"/> 子标签,说明了客户端需要查询 roster

    复制代码
    - (void)queryRoster {
        NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];
        NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
        XMPPJID *myJID = self.xmppStream.myJID;
        [iq addAttributeWithName:@"from" stringValue:myJID.description];
        [iq addAttributeWithName:@"to" stringValue:myJID.domain];
        [iq addAttributeWithName:@"id" stringValue:[self generateID]];
        [iq addAttributeWithName:@"type" stringValue:@"get"];
        [iq addChild:query];
        [self.xmppStream sendElement:iq];
    }
    复制代码

    一个 IQ 响应:

    <iq type="result"

      id="1234567"

      to="xiaoming@example.com">

      <query xmlns="jabber:iq:roster">

        <item jid="xiaoyan@example.com" name="小燕" />

        <item jid="xiaoqiang@example.com" name="小强"/>

      <query />

    <iq />

    type 属性,说明了该 iq 的类型为 result,查询的结果

    <query xmlns="jabber:iq:roster"/> 标签的子标签 <item />,为查询的子项,即为 roster

    item 标签的属性,包含好友的 JID,和其它可选的属性,例如昵称等。

    通过实现

    - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq;

    方法

    当接收到 <iq /> 标签的内容时,XMPPFramework 框架回调该方法

    复制代码
    - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
        if ([@"result" isEqualToString:iq.type]) {
            NSXMLElement *query = iq.childElement;
            if ([@"query" isEqualToString:query.name]) {
                NSArray *items = [query children];
                for (NSXMLElement *item in items) {
                    NSString *jid = [item attributeStringValueForName:@"jid"];
                    XMPPJID *xmppJID = [XMPPJID jidWithString:jid];
                    [self.roster addObject:xmppJID];
                }
            }
        }
    }
    复制代码
    Android 开发讨论群:84778336 
    iOS 开发讨论群:82873648 

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
    转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。
  • 相关阅读:
    [offer_53-1] 在排序数组中查找数字 I (开启编辑看 i,j,m)
    window10 办公软件word、execel、ppt突然变得很卡顿如何解决?
    数组中第k大的数
    heapq 堆
    每日一题 482. 密钥格式化
    算法笔记Go!
    DFS与BFS的python实现
    无向图中找到长度为k的“链”
    无序数组中找一个比左边都大、右边都小的数
    SRM(空域富模型隐写分析)
  • 原文地址:https://www.cnblogs.com/wangpei/p/4126553.html
Copyright © 2020-2023  润新知