Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在XMPP花名册中添加多个用户_Ios_Swift_Xmpp_Xmppframework - Fatal编程技术网

Ios 在XMPP花名册中添加多个用户

Ios 在XMPP花名册中添加多个用户,ios,swift,xmpp,xmppframework,Ios,Swift,Xmpp,Xmppframework,如何在我的花名册中添加多个用户?现在我可以一次添加一个用户。但现在我必须将设备联系人与XMPP同步。使用后端API,我可以过滤掉在应用程序中注册的联系人。现在把他们一个接一个地加入名册太费时了 那么,有没有更快的方法将多个联系人添加到名册中 我已经问了很多问题,比如,但是这些都没有帮助 过滤设备与后端API的联系是一种很好的方法,还是我应该做其他事情?XMPP是一个完整的基于XML的协议,即使库没有一些方法,我们也可以根据需要扩展库。因此,正如您所说,您希望添加多个名册,有两种方法可以实现这一点

如何在我的花名册中添加多个用户?现在我可以一次添加一个用户。但现在我必须将设备联系人与XMPP同步。使用后端API,我可以过滤掉在应用程序中注册的联系人。现在把他们一个接一个地加入名册太费时了

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

我已经问了很多问题,比如,但是这些都没有帮助


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

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];
-(void)addUsers:(NSArray*)昵称为的JID:(NSArray*)可选名称组:(NSArray*)组{
如果(jids==nil)返回;
XMPPJID*myJID=xmppStream.myJID;
//将好友添加到我们的名册中
//
// 
//   
//     
//家族
//     
//   
// 
XMPPIQ*iq=[XMPPIQ iqWithType:@“set”];
for(int i=0;i
}

  • 在服务器端编写一些带有rabbitmq服务的服务api,它将为一个用户插入多个花名册,XMPP服务器将为您更新花名册更新。我希望这个答案能对你有所帮助
    我尝试发送此节:

    <iq type="set" id="15-47" to="940588870@localhost">
        <query xmlns="jabber:iq:roster" ver="1116247190">
            <item jid="1234@localhost" name="user1" subscription="both">
                <group>acceptance</group>
            </item>
            <item jid="7663@localhost" name="user2" subscription="both">
                <group>acceptance</group>
            </item>
            <item jid="9876@localhost" name="user3" subscription="both">
                <group>acceptance</group>
            </item>
            <item jid="1111@localhost" name="user4" subscription="both">
                <group>acceptance</group>
            </item>
        </query>
    </iq>
    

    进一步检查后,XMPP指南指出,它将命名空间为“jabber:IQ:Floster”的数据包和查询元素中超过1个item元素视为错误情况。

    我认为后端API是一种很好的方法,只需将所有联系人发送到服务器。作为响应,服务器提供筛选器contact@JigarDarji谢谢你的回复,后端API绝对是理想的方法。但是如何将这些用户添加到花名册中呢?XMPP SDK中没有提供同时添加多个用户的方法。如果一个接一个地添加使用需要花费很多时间,那么您可以在后台线程中添加它们。您使用的是哪种Api?如果您使用的是基于xml的客户端,您可以发布这一节吗?基本上,一旦用户注册并添加到您的花名册中,如果节正确,服务器应该在您与服务器同步后自动发送整个花名册