2

私のチャット アプリケーションでは、すべてのオンライン登録ユーザーを取得したいと考えています。したがって、このコードで達成される私の名簿の人々だけでなく、全員:

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {
// a buddy went offline/online
NSString *presenceType = [presence type]; // online/offline
NSString *myUsername = [[sender myJID] user];
NSString *presenceFromUser = [[presence from] user];
if (![presenceFromUser isEqualToString:myUsername]) {
    if ([presenceType isEqualToString:@"available"]) {
        [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"chat.denederlandsewateren.nl"]];
    } else if ([presenceType isEqualToString:@"unavailable"]) {
        [_chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"chat.denederlandsewateren.nl"]];
    }
}
}

このコードを使用すると、ユーザーは「友達」である他のユーザーのみを表示しますが、この特定のドメインに登録されているすべてのユーザーが必要です。これはejabberdで可能ですか?

4

3 に答える 3

2

私も同じ問題を抱えていましqueryElementnilXML が次のように表示されるように応答コードを変更しました。

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
//DDLogVerbose(@"%@: %@ - %@", THIS_FILE, THIS_METHOD, [iq elementID]);

//NSXMLElement *queryElement = [iq elementForName:@"query" xmlns: @"http://jabber.org/protocol/disco#items"];
NSXMLElement *queryElement = [iq elementForName:@"query" xmlns: @"jabber:iq:roster"];
NSLog(@"IQ: %@",iq);
if (queryElement) {
    NSArray *itemElements = [queryElement elementsForName: @"item"];
    NSMutableArray *mArray = [[NSMutableArray alloc] init];
    for (int i=0; i<[itemElements count]; i++) {

        NSString *jid=[[[itemElements objectAtIndex:i] attributeForName:@"jid"] stringValue];
        NSLog(@"%@",jid);
        [mArray addObject:jid];
    }
}

return NO; 
}    

お分かりかもしれませんが、私が変更したのはxmlns:thisxmlns: @"http://jabber.org/protocol/disco#items"から thisxmlns: @"jabber:iq:roster"であり、それによってユーザーのリストが得られました。

私は ejabberd を使用していますが、これが他のすべての XMPP サーバーで機能するかどうかはわかりません。

また、これにより「バディ」ユーザーのリストが表示されることがわかりました。「すべての」ユーザーが必要な場合は、管理ユーザーとしてクエリを作成する必要があるようです。詳細については、次のリンクを確認してください: https://www.ejabberd.im/node/3420

于 2015-01-19T06:05:49.337 に答える
0

グーグルの後、すべてのユーザーを簡単に取得することはできません。例 1 の手順に従って共有名簿グループを作成する必要があります。これを行った後、全員が他の全員を見ることができ、以下のデリゲート メソッドですべてのオンライン ユーザーを取得します。

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
于 2016-08-23T14:04:28.833 に答える