Android Asmack/Openfire 401错误

Android Asmack/Openfire 401错误,android,xmpp,smack,openfire,asmack,Android,Xmpp,Smack,Openfire,Asmack,我正试图使用asmack在Android上编写一个简单的XMPP应用程序,但我遇到了一个问题,我无法登录到几个jabber服务器。例如,我无法登录到我的测试Openfire服务器,尽管代码在jabber.org帐户上运行良好 登录代码: public void login() throws XMPPException { if (connection != null && connection.isConnected()) { try

我正试图使用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返回
未授权(401)
错误。我如何修复它?

我从未使用过Openfire,但我确信某个地方有一个日志文件-你能发布它吗

Android中的IIRC某些安全功能(不确定是否适用于SSL或TLS)与Smack或Asmack不兼容,可能这就是问题所在。在这种情况下,有一种方法可以通过使用自己的套接字连接(而不是Smack附带的SSL函数)来解决此问题—要验证这一点,您可以将(与XMPP相关的)代码移植到PC并使用标准Smack库

另一点是,Android有不同的Smack端口。我个人使用Beem项目中的Asmack端口(因为最初的Asmack有一些问题,但我不记得是哪一个问题…)


但是…没有更多信息,我只能猜测。

你确定你在OpenFire服务器上拥有相同的帐户和密码吗?尝试使用与现有XMPP客户端相同的用户名和密码登录到服务器。将Android从等式中完全排除,确保您可以先登录两台服务器。

尝试在登录时删除资源参数。他的问题是,它在一台服务器上工作,但在另一台服务器上不工作。客户端不太可能出现问题,因为在这两种情况下都会失败。不一定……可能服务器需要不同的登录机制。在Asmack中,您可以启用调试模式(
ConnectionConfiguration.setDebuggerEnabled(bool)
),这样您就可以跟踪LogCat中的节,也许在那里您可以找到有用的区别。