Java aSmack muc.getMembers()禁止(403)明火

Java aSmack muc.getMembers()禁止(403)明火,java,android,openfire,smack,asmack,Java,Android,Openfire,Smack,Asmack,我想允许任何聊天室成员获得所有成员的列表。目前,只有作为版主的用户才可以这样做。我似乎找不到需要在哪里设置/更改用户权限以允许此操作 如果以主持人身份登录,则以下代码有效: try { Collection<Affiliate> members = muc.getMembers(); System.out.println(members.size()); } catch(XMPPExceptio

我想允许任何聊天室成员获得所有成员的列表。目前,只有作为版主的用户才可以这样做。我似乎找不到需要在哪里设置/更改用户权限以允许此操作

如果以主持人身份登录,则以下代码有效:

 try {
                Collection<Affiliate> members = muc.getMembers();
                System.out.println(members.size());
            } catch(XMPPException e) {
                e.printStackTrace();
            }
任何建议都将不胜感激。

两项建议:

1) 确保与用于实例化MulitUserChat实例(muc)的会话关联的用户具有足够的聊天室权限来获取成员列表(我认为,但不确定用户是否需要聊天室的管理员权限)

2) 如果1得到了充分的处理,请确保您正在调用SmackAndroid.init(上下文)

希望这有帮助

--关于你最后的评论--

我很抱歉忘记了原来的问题。您是正确的,这两个函数只能由管理员用户调用。我知道,没有管理员用户的同意,会员是无法获得管理员权限的。经过进一步考虑,我认为这是一个糟糕的解决方案,因为向所有用户授予管理员权限会损害聊天室的安全性。幸运的是,有一个更好的解决方案(更复杂一些):


您可以创建一个使用botz库()的插件()。创建muc文件室后,授予该文件室的bot管理员权限。当用户需要下拉成员列表时,用户应向bot发送查询,bot应查询房间并将结果转发给用户。这种设计可以保护您房间的安全,除了好玩之外,botz还可以发挥更大的作用我希望这有助于

注意,a与加入会议室的实体不同。我想你想要一份MUC中所有实体的列表,对吗?嗨@Flow,不,我想要一份MUC成员的列表,或者一份MUC中所有实体的列表。我想我可以通过在每个新参与者加入时将其注册为会员来实现后一个目标,尽管随后出现了上述问题。嘿@Scott-非常感谢您的回答!有没有一种方法可以自动化管理权限过程?例如,我目前已将其设置为新用户可以通过表单registrationForm=muc.getRegistrationForm()成为成员;Form answerForm=registrationForm.createAnswerForm();回答形式:setAnswer(“muc#register#u first”、“name”);answerForm.setAnswer(“muc#register_roomnick”,用户名)muc.sendRegistrationForm(answerForm);我不确定这是否是您要问的,但您可以通过调用instance.grantAdmin(字符串jid)或instance.grantAdmin(集合jid)来授予任何用户或用户集合在MulitUserChat实例中的管理员权限。同样的事情也可以通过instance.grantModerator(字符串昵称)和instance.grantModerator(集合昵称)授予版主权限——如果这不是您想要的,请告诉我。我相信这两种方法都只能由管理员用户调用。我所寻找的是一种让任何用户都能够a)获取成员列表或b)获取每个曾经使用聊天室的人的列表的方法。a)或b)应能够自主完成。如果有一种方法可以让用户通过表单提交或Openfire上的某些设置自动获得管理员权限,我洗耳恭听!编辑了我的答案,因为回复太长,无法发表评论。该解决方案看起来很有希望,谢谢!我真的很感激你花了这么多时间研究这个问题。
 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)