Usando o Android TrustStore para o aSmack no Android 4+ (ICS)
Eu não sou um especialista em keystores e tenho dificuldade em entender as nuances disso, mas isso é o quão longe eu cheguei:
Na criação de uma conexão xmpp usando a compilação asmack encontradaAqui um ainda tem que mudar o armazenamento de confiança, que geralmente, assim que diz o múltiplofontes na web, é feito usando esses comandos
ConnectionConfiguration config = new ConnectionConfiguration(host, Integer.parseInt(port), service);
config.setTruststorePath("/system/etc/security/cacerts.bks");
config.setTruststorePassword("changeit");
config.setTruststoreType("bks");
XMPPConnection connection = new XMPPConnection(connConfig);
connection.connect();
Isso funciona para versões mais antigas do Android, mas no ICS eles mudaram algumas coisas e agora não funciona mais. O caminho agora é diferente.
Pelo vistoisso pode ser consertado mas não tenho idéia do que fazer.
O que é necessário, obviamente, é um método que retorna o caminho, dependendo da versão do SDK que retorna a string necessária para definir o caminho sdk, já que você não pode simplesmente retornar o keystore para a conexão xmpp.
Em referência aisto esse método ficaria assim:
private String getTrustStorePath()
{
String path = System.getProperty("javax.net.ssl.trustStore");
if (path == null)
{
if ( Build.VERSION.SDK_INT >= 14 )
{
//THIS IS THE PART I DONT KNOW
path="";
}
else
{
path = "/system/etc/security/cacerts.bks";
}
return path;
}
Aqui um comentarista diz que sob o Android "4.x; /etc/security/cacerts.bks foi substituído pelo diretório / etc / security / cacerts / contendo os certificados como arquivos codificados PEM individuais." no entanto, não sei qual relevância, se houver, isso tem.
Eu também verifiquei o código de dois projetos usando xmpp e asmack (gtalksms eyaxim mas não viu como eles evitam esse problema.