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


好友列表

 

好友列表,在 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];
            }
        }
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM