2016-04-29 78 views
1

我正在实施一个聊天应用程序,我有一个支持Openfire作为后端并使用Asmack version 8-0.8.9来实现它。但是我在登录时面临非SASL身份验证的问题,并且在消息中收到“服务器无响应”的问题。此外,我还面临一个问题,即每当应用程序处于空闲状态几分钟(没有执行任何操作),我的会话将从openfire中删除,并断开连接。使用XMPP获取非SASL身份验证问题

这是我如何连接到Openfire的,然后进行登录:

AndroidConnectionConfiguration connConfig = 
new AndroidConnectionConfiguration(HOST, PORT,SERVICE); 
connConfig.setDebuggerEnabled(true); 
connConfig.setReconnectionAllowed(false); 
connConfig.setRosterLoadedAtLogin(true); 
connConfig.setSASLAuthenticationEnabled(false); 
connection.connect(); 
connection.login(Uname,Password); 

在大多数情况下,这是工作的罚款,但随机它在登录过程中给了我一个错误,即从服务器与非无应答SASL认证信息。

我在做什么错?让我知道你是否需要其他细节。

在此先感谢!

+0

你可以显示堆栈跟踪吗? –

+0

@BoSøborgPetersenSASL认证失败使用机制平原: 在org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:325) 在org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:395) –

回答

0

你必须确保你包含了所有必需的罐子。

根据你的依赖关系管理系统,你必须以不同的方式添加它,但一定要包含smack-sasl-javax,smack-java7和smack-resolver-javax。

与Maven这将是:

<dependency> 
    <groupId>org.igniterealtime.smack</groupId> 
    <artifactId>smack-sasl-javax</artifactId> 
    <version>4.1.6</version> 
</dependency> 
<dependency> 
    <groupId>org.igniterealtime.smack</groupId> 
    <artifactId>smack-java7</artifactId> 
    <version>4.1.6</version> 
</dependency> 
<dependency> 
    <groupId>org.igniterealtime.smack</groupId> 
    <artifactId>smack-resolver-javax</artifactId> 
    <version>4.1.6</version> 
</dependency> 

,并确保您要验证的服务器证书。

这可以通过'setHostnameVerifier(XMPPHostnameVerifier verifier)'和'setCustomSSLContext(SSLContext context)'完成。