获取房间中用户的真实JID

时间:2017-02-10 22:56:38

标签: xmpp openfire smack

我有一个代码来发现像这样的房间居住者:

public List<String> getRoomOccupants() {

    List<String> occupants = new ArrayList<>();
    DiscoverItems discoItems = null;
    DiscoverItems.Item item = null;
    try {
        ServiceDiscoveryManager discoManager =  ServiceDiscoveryManager.getInstanceFor(connection);

        discoItems = discoManager.discoverItems(zipWhipNumber+"@"+roomService);

        Iterator<DiscoverItems.Item> occupantsItems = discoItems.getItems().iterator();

        while(occupantsItems.hasNext())
        {
            item = occupantsItems.next();

            occupants.add(item.getName());
            System.out.println(" EntityID : " + item.getEntityID() + "\n EntityName : " + item.getName());
        }

    } catch (NoResponseException | XMPPErrorException
            | NotConnectedException e1) {

        e1.printStackTrace();
    }
   return occupants;
}

但是EntityID是房间中用户的名称而不是完整的JID。因此,如果用户有任何机会将名称更改为另一个昵称,我将无法找到他的完整JID。

有谁能告诉我如何从房间里获得完整的JID?

感谢。

1 个答案:

答案 0 :(得分:0)

必须启用发现服务才能显示此类信息,并依赖于实现和MultiUserChat配置。

可能您无法使用标准发现操作获取此信息。

您可以尝试传递MultiUserChat项目,如下所示:

RoomInfo ri = MultiUserChatManager.getInstanceFor(connection).getRoomInfo("zipWhipNumber+"@"+roomService");
List<String> jidUsers = ri.getContactJids());

或者像这样:

MultiUserChat muc = MultiUserChatManager.getInstance().getMultiUserChat("zipWhipNumber+"@"+roomService");
List<String> jidUsers = muc.getOccupants();

*RoomInformation*它或多或少是MultiUserChat上的 DiscoveryService 大小。如果没有正确的配置, getContactJids() 将返回null

带有*getOccupants()* jids的 MultiUserChat 回复的

List,但如果用户之前没有加入给定的{{1},则可能会发送错误请求}}