我正在尝试使用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)错误。我怎么才能修复它?
发布于 2011-10-21 19:58:34
我从来没有用过Openfire,但我肯定在某个地方有一个日志文件--你能把它贴出来吗?
IIRC在Android中,一些安全功能(不确定是SSL还是TLS)与Smack或Asmack不兼容,也许这就是问题所在。在这种情况下,有一种方法可以通过使用自己的套接字连接(而不是Smack包含的SSL函数)来解决-要验证这一点,您可以将(与XMPP相关的)代码移植到PC并使用标准Smack库。
另一点是,Android有不同的Smack端口。我个人使用Beem-project中的Asmack移植(因为最初的Asmack有一些问题--但我记不清是哪一个了……)
但still...without更多的信息,我只能猜测。
发布于 2011-10-24 22:50:53
是否确定您在OpenFire服务器上具有相同的帐户和密码?尝试使用与现有XMPP客户端相同的用户名和密码登录到您的服务器。将Android完全排除在方程式之外,并确保您可以先登录到这两个服务器。
https://stackoverflow.com/questions/7848677
复制相似问题