我已经使用Smack Api(4.1.4)成功地为XMPP创建了一个登录连接。现在,我正在尝试使用创建MultiUserChat,

    try {
        String myMUCName = "TestGroup";
        String myMUCService = "conference.(my local ip)";
        String myMUCfullName = myMUCName + "@" + myMUCService;
        String userName =  "Test5";

        MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
        MultiUserChat muc = manager.getMultiUserChat(myMUCfullName);
        muc.create(userName);

        Log.d(LOCAL_TAG, "createGroupChat  -- Group CEATED Successfully ");
        Form form = muc.getConfigurationForm();
        Form submitForm = form.createAnswerForm();

        List<FormField> fields = form.getFields();
        Log.d(LOCAL_TAG, "createGroupChat  -- fields.size(): "+fields.size());
        for (int i = 0; i < fields.size(); i++) {
            FormField field = (FormField) fields.get(i);
            if (!FormField.Type.hidden.equals(field.getType()) && field.getVariable() != null) {
                submitForm.setDefaultAnswer(field.getVariable());
            }
        }

        List owners = new ArrayList();
        owners.add(userName); //Own user
        owners.add("Test7"); //Another user

        submitForm.setAnswer("muc#roomconfig_roomowners", owners);
        submitForm.setAnswer("muc#roomconfig_publicroom", true);
        submitForm.setAnswer("muc#roomconfig_persistentroom", true);
        muc.sendConfigurationForm(new Form(DataForm.Type.submit));
        //muc.sendConfigurationForm(submitForm);
    Log.d(LOCAL_TAG, "createGroupChat  -- Sent Configuration");
        muc.join(TestGroup);
        Log.d(LOCAL_TAG, "createGroupChat  -- Group Joined Successfully -- owners.size(): "+owners.size());


但是在创建组时我遇到了一个例外

    "org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: forbidden - auth".


希望如此,此异常在代码处发生

   muc.sendConfigurationForm(submitForm);


为此,对此进行了评论。因为在该代码之后我没有得到日志。为了解决这个问题,我将代码更改为

   muc.sendConfigurationForm(new Form(DataForm.Type.submit));


可以解决该异常并创建一个小组,因为我可以看到已打印的日志,并且可以在公开场合看到我的小组。但是我确实知道如何通过这种方式添加我为该组选择的用户,因为所有者列表(或提交表单)不包括在任何地方。我不知道这是怎么回事,我不确定我做对了。请给我建议如何进行。提前致谢。

最佳答案

试试这个代码:

Form form = muc.getConfigurationForm().createAnswerForm();


        // Create a new form to submit based on the original form
        form.setAnswer("muc#roomconfig_passwordprotectedroom", false);
        form.setAnswer("muc#roomconfig_roomname",myMUCName);
        form.setAnswer("muc#roomconfig_persistentroom", true);
        form.setAnswer("muc#roomconfig_changesubject", true);
        form.setAnswer("muc#roomconfig_publicroom",true);
        form.setAnswer("muc#roomconfig_allowinvites",true);
        form.setAnswer("muc#roomconfig_membersonly",false);
        form.setAnswer("muc#roomconfig_moderatedroom",false);

        // Sets the new owner of the room
        List<String> owners = new ArrayList<String>();

        //Be carefull: if members does not exists, it brokes!

        owners.add(userName +"@"+"(my local ip or server name placeholder)");
        form.setAnswer("muc#roomconfig_roomowners", owners);

        // Send the completed form
        muc.sendConfigurationForm(form);
        System.out.println("MUC is now registered");

        muc.join(userName );


现在,如果一切正常,您将以用户名和用户名的身份加入会议室。

您可以通过以下方式以编程方式检查MUC的所有者:

muc.getOwners()  //List<Affiliate>, for each Affialiate you'll have to affiliate.getJid().toString()


您可以通过以下代码行邀请人们:

muc.invite(user, "Invite");


然后,如果您想“永远”看到它们,

muc.grantMembership(user);


这样您就可以看到

muc.getMembers();


请注意:
会员:在MUC中具有定义角色(Onwer,Admin,Member,Outcast)的用户
居住者:MUC中的用户在线

并非所有的乘员都可以扮演角色,并非所有的会员都自动成为乘员。

此外,您不能确定有会员加入过小组聊天。

助焊剂是这样的:

用户1创建Muc
(可选)由User1向希望的任何用户发送Muc邀请(例如:User2,User4)
(可选)由User1将Muc会员分配给他想要的任何现有用户(例如:User3,User4)

在线时,User2和User4会接收邀请/拒绝邀请
用户3和用户4将什么也不会接收,但是它们将在MUC中起作用。

User2,User3,User4需要注册IQProviders以获得IQ节,然后为每个MUC的列表者接收邀请,另一个接收消息(和/或其他事件)。

关于android - 创建MultiUserChat时出现“$ XMPPErrorException:XMPPError:禁止-身份验证”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37875539/

10-12 02:32