我有以下代码来监听聊天室的邀请:
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 检测到邀请请求?
最佳答案
我可能来不及回答这个问题,但我想在这里分享我的解决方案,我有同样的问题,
首先,这取决于你使用的是什么版本的 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 服务器有关用户状态,然后如果您在连接对象上启用了监听器,将会收到在线状态信息和新邀请,这对我有用希望它对你也有用,如果有任何信息请纠正我是错的。
关于java - Smack 中的多用户聊天邀请,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390743/