アップデート
新しいバージョンIO.setDefaultSSLContext
とIO. setDefaultHostnameVerifier
メソッドが利用できない可能性があります。代わりに、 socket.io-client-java の使用法OkHttpClient
で説明されているように、独自のものを作成し、ホスト名ベリファイアと ssl ソケット ファクトリなどを設定できます。そこからのスニペットは次のとおりです。
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.hostnameVerifier(myHostnameVerifier)
.sslSocketFactory(mySSLContext.getSocketFactory(), myX509TrustManager)
.build(); // default settings for all sockets
IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
IO.setDefaultOkHttpCallFactory(okHttpClient);
最初の答え:
Androidのsocket.ioライブラリio.socket:socket.io-client:0.7.0
のバージョンで長い間同じ問題がありました。以前はプロトコルでは問題なく動作していましたが、プロトコルでは接続の確立に問題がありました。http
https
xhr poll errors
次の解決策は、ライブラリ自体を変更せずに機能します。
// Socket connection
private Socket mSocket;
// Configure options
IO.Options options = new IO.Options();
// ... add more options
// End point https
String yourEndpoint = "https://whatever.yoururl.com"
String yourHostName = "yoururl.com"
// If https, explicitly tell set the sslContext.
if (yourEndpoint.startsWith("https://")) {
try {
// Default settings for all sockets
// Set default ssl context
IO.setDefaultSSLContext(SSLContext.getDefault());
// Set default hostname
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return hv.verify(yourHostName, session);
}
};
IO.setDefaultHostnameVerifier(hostnameVerifier);
// set as an option
options.sslContext = SSLContext.getDefault();
options.hostnameVerifier = hostnameVerifier;
options.secure = true;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
// Instantiate the socket
mSocket = IO.socket(mEndpoint, options);
お役に立てれば。