我想允许任何聊天室成员获取所有成员的列表。目前,只有主持人的用户才可以这样做。我似乎无法找到我需要设置/更改用户权限的位置以允许此操作。
如果以管理员身份登录,则以下代码有效:
try {
Collection<Affiliate> members = muc.getMembers();
System.out.println(members.size());
} catch(XMPPException e) {
e.printStackTrace();
}
如果以普通成员身份登录,则上面的代码会抛出Forbidden 403错误。
06-25 19:53:51.198: W/System.err(12943): forbidden(403)
06-25 19:53:51.208: W/System.err(12943): at org.jivesoftware.smackx.muc.MultiUserChat.getAffiliatesByAdmin(MultiUserChat.java:1743)
06-25 19:53:51.208: W/System.err(12943): at org.jivesoftware.smackx.muc.MultiUserChat.getMembers(MultiUserChat.java:1657)
非常感谢任何建议。
答案 0 :(得分:2)
两个建议:
1)确保与用于实例化MulitUserChat实例(muc)的会话相关联的用户具有足够的空间权限来获取成员列表(我认为,但我不确定,用户是否需要房间的管理员权限)
2)如果1被充分处理,请确保您正在调用SmackAndroid.init(上下文上下文)
希望这有帮助!
- 关于你的上一次评论 -
我对丢失原始问题表示道歉。你是对的,这两个函数只能由管理员用户调用。没有管理员用户的同意,没有办法(我知道)让会员获得管理员权限。经过一番考虑,我得出结论认为这是一个糟糕的解决方案,因为授予所有用户管理员权限会损害聊天室的安全性。幸运的是,有一个更好的解决方案(它涉及更多一点):
您可以创建一个使用botz库(http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html)的插件(http://community.igniterealtime.org/docs/DOC-1130#comment-5601)。创建muc房间后,授予机房管理员权限。当用户需要下拉成员列表时,用户应该将查询发送到机器人,机器人应该查询房间并将结果转发给用户。这种设计保留了您房间的安全性,除了有趣之外,botz可以超越这个目的。 - 我希望这有帮助