【问题标题】:I am not able to get the Roster list from the Ejabberd server我无法从 Ejabberd 服务器获取名册列表
【发布时间】:2021-05-20 01:04:29
【问题描述】:

我遇到了一个聊天应用。

由于我之前没有使用过 Ejabberd 服务器,因此我遇到了获取花名册列表的问题之一。

即使联系人列表在服务器上可用,我每次都将列表设为 nil。

以下是我用来获取花名册的方法。

以下是我获取联系人的方法:

在这段代码中,我每次都将查询列表设为 nil

-(void)fetchContacts {
    NSError *error = [[NSError alloc] init];
    NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='jabber:iq:roster'/>" error:&error];
    XMPPIQ *iq = [DDXMLElement elementWithName:@"iq"];
    [iq addAttributeWithName:@"type" stringValue:@"get"];
    [iq addChild:query];
    [self.xmppStream sendElement:iq];
}

确实收到IQ方法:

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{ 
      NSXMLElement *query = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
      if (query) {
         NSArray *item = [query elementsForName: @"item"];
         NSMutableArray *arr = [[NSMutableArray alloc] init];
         for (int i=0; i<[item count]; i++) {
             NSString *jid=[[[item objectAtIndex:i] attributeForName:@"jid"] stringValue];
             [arr addObject:jid];
         }
         [userDefault setValue:arr forKey:@"contacts"];
         [userDefault synchronize];
         [[NSNotificationCenter defaultCenter] postNotificationName:@"ContactsData" object:nil];
      }
      return YES; 
}

我已经从堆栈溢出尝试了许多解决方案,但对我没有任何效果。

谢谢!

【问题讨论】:

    标签: ios objective-c xmpp ejabberd


    【解决方案1】:

    使用网络流量捕获您的客户端发送给 ejabberd 的内容。

    然后安装一个知名的 XMPP 客户端,例如 Gajim、Psi、Tkabber...然后使用该客户端执行相同的操作,并再次捕获客户端发送的 XML。

    将此与您的客户发送的 XML 进行比较,希望您会看到一些相关的变化(以及其他不相关的差异)。

    【讨论】:

    • 嗨@Badlop,感谢您的回答,将执行您提到的步骤并通知您。
    猜你喜欢
    • 2016-01-30
    • 2017-03-09
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多