我有以下代码来听取聊天室的邀请:
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检测到邀请请求?
答案 0 :(得分: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服务器有关用户状态的信息,如果你在连接对象上启用了监听器,将会收到状态信息和新邀请,这对我有用,希望它对你也有用,如果有任何信息,请纠正我是错的。
答案 1 :(得分:0)
您可能使用了pidgin中错误的用户名。您必须使用名称后跟电子邮件地址。