获取名单列表XMPP框架

Cha*_*Raj 1 ejabberd ios xmppframework

以下是我使用过的委托方法,即使调用它,' queryElement '也会被赋值为nil.虽然登录用户有很多联系人.

-(BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
   NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
   NSMutableArray *ArrayUsers = [[NSMutableArray alloc]init];
   if (queryElement) 
   {
       NSArray *itemElements = [queryElement elementsForName: @"item"];
       [ArrayUsers removeAllObjects];
       for (int i=0; i<[itemElements count]; i++) 
       {
           NSString *jid=[[[itemElements objectAtIndex:i] attributeForName:@"jid"] stringValue];
           [ArrayUsers addObject:jid];
       }
   }
   NSLog(@"users: %@",ArrayUsers);
   return NO;

}
Run Code Online (Sandbox Code Playgroud)

任何能帮助获得好友列表(在线和离线)的人?

XMPPFramework的方法:

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
Run Code Online (Sandbox Code Playgroud)

每当好友上线或下线时调用.但是需要完整的好友列表.

Cha*_*Raj 9

要获得完整的名单,您需要发送名单请求:

- (void)FetchFriends 
{
    NSError *error = [[NSError alloc] init];
    NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='jabber:iq:roster'/>"error:&error];
    NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];

    [iq addAttributeWithName:@"type" stringValue:@"get"];
    [iq addAttributeWithName:@"id" stringValue:@"ANY_ID_NAME"];
    [iq addAttributeWithName:@"from" stringValue:@"ANY_ID_NAME@weejoob.info"];
    [iq addChild:query];

    [xmppStream sendElement:iq];
}
Run Code Online (Sandbox Code Playgroud)

服务器响应请求,并通过以下委托方法处理响应:

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
    NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
    if (queryElement) 
    {
        NSArray *itemElements = [queryElement elementsForName: @"item"];
        for (int i=0; i<[itemElements count]; i++)
        {
            NSLog(@"Friend: %@",[[itemElements[i] attributeForName:@"jid"]stringValue]);
        }
    }
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

名单可能包含关系类型(to,none,both,from),根据您的要求,您可以通过上面项目列表的'type'属性选择合适的名册成员.