邀请监听器不工作 smack 4.2

Invitation Listener not working smack 4.2

XMPP(smack) 可以成功创建群聊了。我已经添加了 邀请监听器,但从未调用过。有人知道怎么做吗?

使用:

  1. XMPP
  2. Smack 4.2
  3. Openfire 服务器

发送邀请码:

 muc.invite(userId +"@" +XMPP.getInstance().HOST + "/Smack", "Meet me in this excellent room");

邀请监听代码:

         MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
            manager.addInvitationListener(new InvitationListener() {
                @Override
                public void invitationReceived(XMPPConnection xmppConnection, MultiUserChat muc, String inviter, String reason, String password, Message message) {
                    try {
                        muc.join(nickname);
                    } catch (SmackException.NoResponseException e) {
                        e.printStackTrace();
                    } catch (XMPPException.XMPPErrorException e) {
                        e.printStackTrace();
                    } catch (SmackException.NotConnectedException e) {
                        e.printStackTrace();
                    }
                }
            });

您可能对 RESOURCE 有疑问。

当您向某个 JID 发送邀请时,您可以省略 resource 部分,否则消息将仅发送给指定的 资源.

JID的组成方式如下:

user@serverdomain/resource

通过此邀请,您只邀请使用“Smack”作为 Resource 的用户。 资源配置在AbstractXMPPConnection对象或登录阶段

XMPPTCPConnectionConfiguration.builder()
                .setServiceName(serverName)
                .setHost(server)
                .setPort(port)
                .setResource( RESOURCE_IDENTIFIER)
                .build();
connection = new XMPPTCPConnection(config);

connection.login(username, password, RESOURCE_IDENTIFIER);

因此,您声明的资源标识符(只是一个任意字符串)可能不是 "Smack",而是 "Spark" o 其他内容或保留默认值。

直接省略资源部分(或修改正确的部分,但我建议省略)

 muc.invite(userId +"@" +XMPP.getInstance().HOST, "Meet me in this excellent room");

当然,userId必须存在,HOST才是有效的