【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をクエリーする必要があることを示します.
IQ応答:
id="1234567"
to="[email protected]">
typeプロパティ、iqのタイプがresultであることを説明し、クエリの結果
ラベルのサブラベル- は、クエリーのサブアイテム、すなわちrosterです.
itemタグのプロパティには、友達のJIDやニックネームなど、他のオプションのプロパティが含まれています.
実現によって
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq;
方法
タグのコンテンツを受信すると、XMPPPFrameworkフレームワークはこのメソッドをコールバックする
友達リスト、XMPPではrosterと呼ばれ、花名簿?
rosterを取得するには、クライアントが
IQリクエスト:
to="example.com"
id="1234567">
typeプロパティは、このiqのタイプがgetであることを説明し、HTTPと同様にサーバ側に情報を要求する
fromプロパティ、メッセージソース、ここはあなたのJIDです
toプロパティ、メッセージターゲット、ここではサーバドメイン名
id属性は、この要求IDをマークし、サーバがgetタイプのiqを要求する処理を完了すると、応答するresultタイプiqのIDは要求iqのIDと同じである
- (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応答:
to="[email protected]">
typeプロパティ、iqのタイプがresultであることを説明し、クエリの結果
itemタグのプロパティには、友達のJIDやニックネームなど、他のオプションのプロパティが含まれています.
実現によって
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq;
方法
- (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];
}
}
}
}