在 android 上使用 smack 4.1.0 的 openfire 问题

Posted

技术标签:

【中文标题】在 android 上使用 smack 4.1.0 的 openfire 问题【英文标题】:openfire issue using smack 4.1.0 on android 【发布时间】:2015-09-30 15:18:27 【问题描述】:

我正在安卓上制作一个 IM 客户端。我正在使用在 EC2 上运行的 openfire 服务器实例。我目前正在尝试使用我的应用注册新用户。连接工作正常,但是当我调用 AccountManager.createAccount(email, password, mymap) 时,我遇到了异常。

即下面的 XMPPErrorExecption 是我的堆栈跟踪

10-01 02:58:54.443    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: bad-request - modify
10-01 02:58:54.444    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232)
10-01 02:58:54.444    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:213)
10-01 02:58:54.444    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ at org.jivesoftware.smackx.iqregister.AccountManager.createAccount(AccountManager.java:272)
10-01 02:58:54.444    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ at com.example.eoin_a.im_app20.Utils.ConnectionManager.registerDevice(ConnectionManager.java:109)
10-01 02:58:54.444    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ at com.example.eoin_a.im_app20.Models.RegisterModel$1.call(RegisterModel.java:110)
10-01 02:58:54.444    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ at com.example.eoin_a.im_app20.Models.RegisterModel$1.call(RegisterModel.java:93)
10-01 02:58:54.445    1747-3673/com.example.eoin_a.im_app20 W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)

我还在我的 openfire 服务器上的日志中收到“用户尝试使用未知收件人对此服务器进行身份验证”消息。我不太清楚这意味着什么。

我也在地图中发送服务器所需的所有额外参数。

下面是我用来创建连接的代码

 config = XMPPTCPConnectionConfiguration.builder()
                .setHost(HOST)
                .setPort(PORT)
              .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                .setServiceName(HOST)
                .setUsernameAndPassword(ACCOUNT, PASS)
                .build();
             conn = new XMPPTCPConnection(config);
             conn.setPacketReplyTimeout(10000);
             accman = AccountManager.getInstance(conn);

我在服务器上使用默认的 xmpp.domain,这似乎是服务器设置中的私有 IP 地址。我不确定这是否会导致问题。如果有人知道为什么这可能对我不起作用,我将不胜感激。谢谢!

【问题讨论】:

任何人都对这个领域有任何了解。我被难住了 【参考方案1】:

我刚刚遇到了同样的错误。就我而言,我在connection.login() 之后调用了accountManager.createAccount()。关于如何解决问题的提示在 accountManager.supportsAccountCreation() 的 Javadoc 中。

如果服务器支持创建新帐户,则返回 true。许多服务器要求您在创建新帐户时当前未经过身份验证,因此最安全的做法是仅在登录服务器之前创建新帐户。

因此,在创建新帐户时,请确保您没有登录!至少它解决了我的问题。

【讨论】:

我明天回去看看。我知道我有联系。老实说,不要以为我在登录。我将在创建帐户后尝试登录 认为我的 IM 客户端应用程序现在处于暂停状态。 Openfire 似乎非常不可靠。 能否报告一下,如果这解决了您的问题?以防其他人遇到同样的问题。

以上是关于在 android 上使用 smack 4.1.0 的 openfire 问题的主要内容,如果未能解决你的问题,请参考以下文章

android中的XMPP连接使用smack

XMPP Smack 4.1.0 检查用户是不是已经注册

XMPP Smack 4.1.0 rc1 异常重新加载名册

在 android 上使用 smack 面临问题

smack 使用 4.1.0 rc1 在 muc 中接收消息

Openfire:在android上使用smack向特定人广播消息