java - 使用 XMPP 获取非 SASL 身份验证问题

标签 java android xmpp sasl

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

这就是我连接到 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 身份验证消息。

我做错了什么?如果您需要任何其他详细信息,请告诉我。

提前致谢!

最佳答案

您必须确保包含所有必要的 jar。

根据您的依赖管理系统,您必须以不同的方式添加它,但请确保包含 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)”来完成。

关于java - 使用 XMPP 获取非 SASL 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939411/

相关文章:

java - 是否可以使用 plafyramework2 for java 和 groovy 模板?

java - 互联网连接异常失败

java - 在 SpringMVC 中将 StringTemplate 与表单一起使用

android - MainApplication 是否会在更新应用程序后始终运行,即使用户没有打开它?

android - 自动登录应用程序

android - 如何使用 Smack 了解 XMPP openfire 中的键入状态

java - java `wait()`等待是如何实现的?

android - SimpleCursorAdapter 的 onRestoreInstanceState

android - 启用流管理 asmack android

java - 在带有 aSmack 的 XMPP 中使用 UserSearch 时,getSearchForm 返回 null