【问题标题】:Get the real JID of user in a room获取房间内用户的真实 JID
【发布时间】:2017-02-10 22:56:37
【问题描述】:

我有一个代码可以像这样发现房间住户:

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?

谢谢。

【问题讨论】:

    标签: xmpp openfire smack


    【解决方案1】:

    必须启用发现服务才能显示此类信息,并且取决于实现和 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()* of a MultiUserChat 回复 List of jids,但如果用户之前没有加入给定的*MultiUserChat*,它可能会发送错误请求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多