在 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 问题的主要内容,如果未能解决你的问题,请参考以下文章