在Android

时间:2015-09-30 15:18:28

标签: android xmpp openfire smack

我在Android上制作了一个IM客户端。我使用在EC2上运行的openfire服务器实例。我目前正在尝试使用我的应用注册新用户。连接工作正常,但当我调用AccountManager.createAccount(电子邮件,密码,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)

Iam也得到了一个"用户尝试使用未知的收件人对此服务器进行身份验证"我的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);

Iam使用服务器上的默认xmpp.domain,它似乎是服务器设置中的私有IP地址。我不确定这是否会导致问题。如果有人知道为什么这可能不适合我,我会很感激一些帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

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

  

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

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