使用 Smack 4.1 连接到 Gtalk

Posted

技术标签:

【中文标题】使用 Smack 4.1 连接到 Gtalk【英文标题】:Connect to Gtalk using Smack 4.1 【发布时间】:2015-04-07 08:46:05 【问题描述】:

我正在尝试使用 Smack 4.1 从我的 android 应用程序连接到 Gtalk,但每次我尝试连接时,它都会显示错误:javax.net.ssl.SSLHandshakeException: Handshake failed

下面是我的代码:

private class ConnectionThread extends AsyncTask<Void, Void, Boolean> 

        @Override
        protected Boolean doInBackground(Void... params) 
            boolean isConnected = false;
            XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
                    .builder();

            config.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
            config.setUsernameAndPassword(username,password);
            config.setServiceName(service);
            config.setHost(host);
            config.setPort(port);
            config.setDebuggerEnabled(true);
            //config.setCompressionEnabled(false);
            config.setSocketFactory(SSLSocketFactory.getDefault());

            connection = new XMPPTCPConnection(config.build());

            XMPPConnectionListener connectionListener = new XMPPConnectionListener();
            connection.addConnectionListener(connectionListener);

            try 
                connection.connect();

                isConnected = true;
             catch (Exception e) 
                Log.e(TAG,"Unable to connect to server = " + e.toString());
            
            return isConnected;
        

    

其中主机、用户名、密码服务和端口来自 String.xml 值:

<?xml version="1.0" encoding="utf-8"?>

<string name="app_name">XmppLab</string>
<string name="action_settings">Settings</string>
<string name="connect">Connect</string>
<string name="host">talk.google.com</string>
<string name="port">5222</string>
<string name="username">username@gmail.com</string>
<string name="password">password</string>
 <string name="service">gmail.com</string>

请告知我在这里遗漏了什么吗?非常感谢您提供任何帮助。

【问题讨论】:

config.setSocketFactory(SSLSocketFactory.getDefault()); 为什么? 嗨,Flow,感谢您的提示。我在下面分享我编辑的代码,希望它能帮助其他有同样问题的人。 @Flow 我在尝试初始化XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration .builder(); 时得到ExceptionInInitializeError 这种行为是否已知?? 【参考方案1】:

感谢您的提示。我将代码更改如下,现在它可以连接到 Gtalk:

config.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
            config.setUsernameAndPassword(username,password);
            config.setServiceName(service);
            config.setHost(host);
            config.setPort(port);
            config.setDebuggerEnabled(true);
            //config.setCompressionEnabled(false);
            //config.setSocketFactory(SSLSocketFactory.getDefault());

【讨论】:

以上是关于使用 Smack 4.1 连接到 Gtalk的主要内容,如果未能解决你的问题,请参考以下文章

Smack 连接到 Google 的 XMPP 服务 (gtalk) 会引发异常“SASLError using PLAIN: not-authorized”

Apache Camel - 连接到 Gtalk

无法使用 Smack 4.1 从 Android 连接 apache vysper XMPP 服务器

XMPP:连接到 GTalk

无法使用 node.js 和 node-xmpp 连接到 GTalk

Gtalk OAuth 令牌连接到 Gtalk 服务