android - Ejabberd XMPPException$XMPPErrorException : XMPPError: service-unavailable - cancel, 加入MUC

标签 android xmpp ejabberd smack

好吧,我遇到了一个奇怪的问题。我能够创建 muc,能够邀请用户,能够加入,但一段时间后我无法加入新创建的组。 这仅对某些用户发生,而其他用户能够创建/加入组。 我正在创建 MUC 组:

MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(getConnection());
            MultiUserChat chatRoom = manager.getMultiUserChat(groupName+ "@conference." + Constants.XMPP_SERVICE);

            chatRoom.createOrJoin(chatGroup.title);

用户邀请如下:

 MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(getConnection());
                        MultiUserChat chatRoom = manager.getMultiUserChat(groupName+ "@conference." + Constants.XMPP_SERVICE);
chatRoom.changeNickname(FirstName);
                                chatRoom.invite(invite.UserId + "@" + Constants.XMPP_SERVICE, groupInfo);

我还有另一端

 @Override
    public void invitationReceived(XMPPConnection conn, final MultiUserChat room, String inviter, final String reason, String password, final Message message) {
        Log.d("XMPPInvitation", "");
        try {
            room.join(FirstName);

上面的代码工作正常,但一段时间后开始出现以下错误:

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: service-unavailable - cancel
 at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232)
at org.jivesoftware.smackx.muc.MultiUserChat.enter(MultiUserChat.java:311)
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:495)
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:430)
at com.app.xmpp.GroupChatInvitationListener.invitationReceived(GroupChatInvitationListener.java:45)

我在 GroupChatInvitationListener.java:45 处有 room.join 我也在收到的 XML 中注意到了这一点

<presence from='c09b59da-1d5b-4783-9346-93c23edc0660@conference.MyHOST/A J 33' to='31bc27e9-c650-4870-aaab-ca7285848954@MyHOST/A J 33' type='error' xml:lang='en' id='WC0zt-374'><x xmlns='http://jabber.org/protocol/muc'/><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='os2Kusj3WEOivn5n4iFr/ZEO8ls='/><error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></presence>

如果我从 Ejabberd Admin 重新启动 mod_muc 模块,它会再次开始工作。 你能建议可能是什么问题吗?

最佳答案

好吧,问题出在 MUC 实现中,如果 MUC 中没有用户在线,那么服务器将使该 MUC 无效。如果群组为空(没有在线加入者),即使所有者也将无法再次加入该群组。

要解决这个问题,我们必须使用MUC-SUB实现很有魅力,但是目前它是实验性的,但它有效:)

关于android - Ejabberd XMPPException$XMPPErrorException : XMPPError: service-unavailable - cancel, 加入MUC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533123/

相关文章:

android - 在 xml 中为 PreferenceScreen 设置 Intent-flags

android - 如何解决软键盘显示/隐藏工作缓慢?

android - android中textAppearance的默认值是:theme ="@style/AppTheme" textAppearanceSmall?

android - 使用 Bosch 和 Strophe 将 ejabberd 集成到现有的 nodejs 应用程序中

xmpp - 使用 Smack 加载 vCard 信息时出错 : "EmptyResultIQ cannot be cast to org.jivesoftware.smackx.vcardtemp.packet.VCard"

android - 为什么 ACRA 库抛出异常对话框甚至应用程序当前未运行?

php - 无法连接到谷歌云连接服务器

java - 如何使用 smack java 库向 gtalk 联系人发送邀请?

android - smack 4.2.0 错误 : IN AAAA yielded an error response NX_DOMAIN

erlang - 在 ejabberd.yml 文件中配置一些参数