使用 XMPP框架/ OpenFire 在 Android 上使用实时聊天应用,然后转移到新的云端服务器,但我遇到了一些旧Android用户的问题连接。新用户可以正常登录并连接到OpenFire服务器。
使用旧用户帐户时,第一次连接失败,但第二次连接失败。谁知道问题可能是什么?
无法弄清问题是什么。
答案 0 :(得分:1)
如果您尝试将xmpp与openfire连接,那么只需使用smack库授予 XMPPTCPConnectionConfiguration 的ssl权限,
private XMPPTCPConnectionConfiguration buildConfiguration() throws XmppStringprepException {
XMPPTCPConnectionConfiguration.Builder builder =
XMPPTCPConnectionConfiguration.builder();
builder.setHost(Common.HOST);
builder.setPort(PORT);
builder.setCompressionEnabled(false);
builder.setDebuggerEnabled(true);
builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
builder.setSendPresence(true);
if (Build.VERSION.SDK_INT >= 14) {
builder.setKeystoreType("AndroidCAStore");
builder.setKeystorePath(null);
} else {
builder.setKeystoreType("BKS");
String str = System.getProperty("javax.net.ssl.trustStore");
if (str == null) {
str = System.getProperty("java.home") + File.separator + "etc" + File.separator + "security"
+ File.separator + "cacerts.bks";
}
builder.setKeystorePath(str);
}
DomainBareJid serviceName = JidCreate.domainBareFrom(Common.HOST);
builder.setServiceName(serviceName);
return builder.build();
}
并在此处与服务器连接时调用此示例,请参阅
XMPPTCPConnectionConfiguration config = buildConfiguration();
SmackConfiguration.DEBUG = true;
this.connection = new XMPPTCPConnection(config);
this.connection.connect();
有关详细信息,请访问此example
感谢希望这可以帮助您解决问题(Y)。
答案 1 :(得分:0)
要使用SSL从Android设备连接到openfire(任何xmpp服务器),请使用Smack
// Set key for SSL connection
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
config.setKeystoreType("AndroidCAStore");
config.setKeystorekeyPath(null);
} else {
config.setKeystoreType("BKS");
String keyPath = System.getProperty("javax.net.ssl.trustStore");
if (keyPath == null)
keyPath = System.getProperty("java.home") + File.separator + "etc"
+ File.separator + "security" + File.separator + "certs.bks";
config.setKeystorekeyPath(keyPath);
}
}
// Now set custom SSL to configuration
try {
SSLContext ssl = SSLContext.getInstance("TLS");
ssl.init(null, new TrustManager[]{new TLSUtils.AcceptAllTrustManager()}, null);
ssl.getServerSessionContext().setSessionTimeout(10 * 1000);
config.setCustomSSLContext(ssl);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
config.setSecurityMode(Connectionconfig.SecurityMode.required);
// config is type of XMPPTCPConnectionConfiguration