【iOS XMPP】XMPFramwok(5):友達リストを使う

4549 ワード

友達リスト
 
友達リスト、XMPPではrosterと呼ばれ、花名簿?
rosterを取得するには、クライアントがラベルをXMPPサーバ側に送信する必要があります.
 
IQリクエスト:
  from="[email protected]"
  to="example.com"
  id="1234567">
  

typeプロパティは、このiqのタイプがgetであることを説明し、HTTPと同様にサーバ側に情報を要求する
fromプロパティ、メッセージソース、ここはあなたのJIDです
toプロパティ、メッセージターゲット、ここではサーバドメイン名
id属性は、この要求IDをマークし、サーバがgetタイプのiqを要求する処理を完了すると、応答するresultタイプiqのIDは要求iqのIDと同じである
サブタブは、クライアントが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応答:
  id="1234567"
  to="[email protected]">
  
    
    
  

typeプロパティ、iqのタイプがresultであることを説明し、クエリの結果
ラベルのサブラベルは、クエリーのサブアイテム、すなわちrosterです.
itemタグのプロパティには、友達のJIDやニックネームなど、他のオプションのプロパティが含まれています.
 
実現によって
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq;
方法
タグのコンテンツを受信すると、XMPPPFrameworkフレームワークはこのメソッドをコールバックする
- (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];

            }

        }

    }

}