我在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地址。我不确定这是否会导致问题。如果有人知道为什么这可能不适合我,我会很感激一些帮助。谢谢!
答案 0 :(得分:0)
我刚刚遇到了同样的错误。就我而言,我在accountManager.createAccount()
之后致电connection.login()
。关于如何解决问题的提示是在accountManager.supportsAccountCreation()
的Javadoc中。
如果服务器支持创建新帐户,则返回true。许多服务器要求您在创建新帐户时不进行当前身份验证,因此最安全的行为是仅在登录服务器之前创建新帐户。
因此,请确保您在创建新帐户时未登录!至少它解决了我的问题。