我正在尝试使用asmack在Android上编写一个简单的XMPP应用程序,但我遇到了一个问题,我无法登录到几个jabber服务器 . 例如,我无法登录我的测试Openfire服务器,尽管代码可以正常使用jabber.org帐户 .
登录代码:
public void login() throws XMPPException
{
if (connection != null && connection.isConnected())
{
try
{
Random generator = new Random();
int resource_int = generator.nextInt();
connection.login(USERNAME, PASSWORD,
"Smack_" + Integer.toString(resource_int));
}
catch (XMPPException e)
{
e.printStackTrace();
connection.disconnect();
setConnection(null);
throw e;
}
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
}
}
正如我所说,它适用于jabber.org,但Openfire返回 not-authorized(401)
错误 . 我该如何解决?
2 回答
我从未使用过Openfire,但我确定某处有一个Logfile - 你可以发布它吗?
Android中的IIRC一些安全功能(不确定是否为SSL或TLS)与Smack或Asmack不兼容,也许这就是问题所在 . 在这种情况下,有一种方法可以通过使用自己的Socket连接(而不是Smack包含的SSL函数)来解决它 - 为了验证这一点,您可以将(XMPP相关的)代码移植到PC并使用标准Smack库 .
另一点是,Android有不同的Smack端口 . 我个人使用Beem项目的Asmack端口(因为最初的Asmack有一些问题 - 但我不记得哪些......)
但仍然......没有更多信息,我只能猜测 .
您确定在OpenFire服务器上拥有相同的帐户和密码吗?尝试使用与现有XMPP客户端相同的用户名和密码登录服务器 . 将Android完全排除在外,确保您可以先登录两台服务器 .