Smack中的多用户聊天邀请

4
我有以下代码来监听聊天室的邀请:
    Connection.DEBUG_ENABLED = true;
    XMPPConnection connection = new XMPPConnection("jabber.org");
    connection.connect();
    connection.login("username", "password");

    MultiUserChat.addInvitationListener(connection, new InvitationListener() {
        @Override
        public void invitationReceived(Connection arg0, String arg1,
                String arg2, String arg3, String arg4, Message arg5) {
            System.out.println("Invitation Received!");
        }
    });

    System.out.println("Connected, waiting for invitation");
    while(true) {
        Thread.yield();
    }
}

我之后使用另一个账户在pidgin中创建一个聊天室,并邀请上述用户。但是invitationReceived方法没有被调用。当我登录时,smack调试器会接收到一个出席状态更新,但没有其他数据包。然而,如果我使用pidgin登录到上述用户,我会收到邀请。如何使smack检测到邀请请求?


你好Jonathan,你能收到邀请吗?我的意思是你的invitationReceived方法被调用了吗?我能够邀请用户,但是无法接收任何邀请。 - KK_07k11A0585
2个回答

2
我可能回答这个问题有点晚,但我想在这里分享我的解决方案,我遇到了同样的问题。
首先,这取决于你使用的Smack版本(我推荐使用最新版本)。
其次,发送MUC邀请的用户和接收邀请的用户应该连接到相同的服务器才能接收MUC邀请。
第三,始终启用Smack调试器,它将提供有关传入和传出数据包的信息。
第四个因素是,在登录后向XMPP服务器发送一个存在状态,如下所示:
       connection.setStatus(true,"ONLINE");

public void setStatus(boolean available, String status) throws XMPPException {
        Presence.Type type = available? Type.available: Type.unavailable;
        Presence presence = new Presence(type);
        presence.setStatus(status);
        connection.sendPacket(presence);
    } 

发送出席状态通知XMPP服务器有关用户状态,如果您已在连接对象上启用侦听器,则将接收到出席信息以及新的邀请。这对我有效,希望对您也有效。如果有任何信息错误,请纠正我。


0

你可能在Pidgin中使用了错误的用户名。你必须使用用户名后面跟着电子邮件地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接