在XMPP名单中添加多个用户

rv7*_*284 5 xmpp ios xmppframework swift

如何在我的名册中添加多个用户?现在我可以一次添加一个用户.但现在我必须与XMPP同步设备联系.使用后端API我可以过滤掉在应用程序中注册的联系人.现在将它们逐一添加到名册中需要花费太多时间.

那么有没有更快捷的方式将多个联系人添加到名册中?

我已经经历了很多像这样的问题,但是他们没有帮助.

并且过滤设备与后端API联系是一种很好的方法,还是我应该做其他事情?

小智 0

XMPP是一个完整的基于XML的协议,即使库没有一些方法,我们也可以根据需要扩展库。因此,正如您所说,您想要添加多个名册,有两种方法可以实现它: 1. 在 XMPP 客户端库或应用程序中添加一些方法,然后添加多个名册项目,如下所示:

- (void)addUsers:(NSArray<XMPPJID *> *)jids withNickname:(NSArray<NSString *> *)optionalNames groups:(NSArray *)groups {

if (jids == nil) return;
XMPPJID *myJID = xmppStream.myJID;



// Add the buddy to our roster
//
// <iq type="set">
//   <query xmlns="jabber:iq:roster">
//     <item jid="bareJID" name="optionalName">
//      <group>family</group>
//     </item>
//   </query>
// </iq>

XMPPIQ *iq = [XMPPIQ iqWithType:@"set"];

for (int i = 0; i < jids.count; i++) {

    XMPPJID *jid = jids[0];
    if ([myJID isEqualToJID:jid options:XMPPJIDCompareBare])
    {
        // You don't need to add yourself to the roster.
        // XMPP will automatically send you presence from all resources signed in under your username.
        //
        // E.g. If you sign in with robbiehanson@deusty.com/home you'll automatically
        //    receive presence from robbiehanson@deusty.com/work

        XMPPLogInfo(@"%@: %@ - Ignoring request to add myself to my own roster", [self class], THIS_METHOD);
        continue;
    }
    NSXMLElement *item = [NSXMLElement elementWithName:@"item"];
    [item addAttributeWithName:@"jid" stringValue:[jid bare]];
    NSString *optionalName = optionalNames[i];
    if(optionalName)
    {
        [item addAttributeWithName:@"name" stringValue:optionalName];
    }

    for (NSString *group in groups) {
        NSXMLElement *groupElement = [NSXMLElement elementWithName:@"group"];
        [groupElement setStringValue:group];
        [item addChild:groupElement];
    }

    NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];
    [query addChild:item];
    [iq addChild:query];
}

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

}

  1. 在服务器端使用一些rabbitmq服务编写一些服务api,它将为用户插入多个名册,并且XMPP服务器将向您更新有关名册更新的信息。我希望这个答案能帮助你。