Asmack/Openfire 401 错误
Posted
技术标签:
【中文标题】Asmack/Openfire 401 错误【英文标题】:Asmack/Openfire 401 error 【发布时间】:2011-10-21 11:21:58 【问题描述】:我正在尝试使用 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)
错误。我该如何解决?
【问题讨论】:
尝试在登录时删除您的资源参数。 【参考方案1】:我从未使用过 Openfire,但我确定某处有一个日志文件 - 你可以发布它吗?
Android 中的 IIRC 某些安全功能(不确定是否用于 SSL 或 TLS)与 Smack 或 Asmack 不兼容,也许这就是问题所在。在这种情况下,有一种方法可以通过使用自己的 Socket 连接(而不是 Smack 包含的 SSL 功能)来解决它 - 要验证这一点,您可以将(XMPP 相关)代码移植到 PC 并使用标准 Smack 库。
另一点是,Android 有不同的 Smack 端口。我个人使用 Beem 项目中的 Asmack 端口(因为最初的 Asmack 有一些问题 - 但我不记得是哪些问题了......)
但仍然......没有更多信息我只能猜测。
【讨论】:
他的问题是它可以在一台服务器上运行,但不能在另一台服务器上运行。不太可能是客户端的问题,因为它在两种情况下都应该失败。 不一定...可能服务器需要不同的登录机制。在 Asmack 中,您可以启用调试模式 (ConnectionConfiguration.setDebuggerEnabled(bool)
),以便您可以在 LogCat 中跟踪节,也许在那里您可以找到有用的区别。【参考方案2】:
您确定您在 OpenFire 服务器上拥有相同的帐户和密码吗?尝试使用与现有 XMPP 客户端相同的用户名和密码登录到您的服务器。将 Android 完全排除在外,并确保您可以先登录两台服务器。
【讨论】:
以上是关于Asmack/Openfire 401 错误的主要内容,如果未能解决你的问题,请参考以下文章
android asmack+openfire怎么发离线文件