WebSocket 接続を保持しているバックグラウンドで実行されるAndroidアプリに Service を追加します(数時間または数日にわたって)。サーバーにデータを送信します。
現在、Java用のWebSocketライブラリがたくさんあるようです。どちらを使用すべきかわかりません。
TooTallNate/Java-WebSocketGitHubからの説明:100%Javaで記述されたベアボーンWebSocketクライアントおよびサーバー実装。 http://Java-websocket.org/ -このリンクは 「Android websocket」をグーグルで作った最初の結果 にリンクされています。ただし、特にSSL接続に関してはかなり多くの未解決の問題があり、現時点では積極的に保守されていないようです。
koush/AndroidAsyncGitHubからの説明:非同期ソケット、http(クライアント+サーバー)、websocket、およびsocket.ioライブラリアンドロイド。スレッドではなく、nioに基づいています。 -繰り返しますが、多くの未解決の問題がありますが、activileyが保守/作業しているようです。
Project TyrusWebサイトからの説明:JSR 356:Java API for WebSocket-Reference Implementation-Thisオラクル製です。 Androidで動作するかどうかはわかりません。
Jetty WebSocket Client APIWebサイトからの情報:Jettyは、Jetty WebSocketクライアントライブラリも提供して、WebSocketサーバーとの会話を簡単にします。 -繰り返しますが、Androidで動作するかどうかはわかりません。
codebutler/Android-websocketsGitHubの説明:Androidの最小限のWebsocket(hybi13/RFC)クライアント_-これは schwiz/Android-websocket-example で使用されます。これはStackOverflow-question " Androidデバイスの作成方法ウェイクロックなしでインターネットへのTCP接続を保持しますか? "。
Atmosphere/wasyncGitHubの説明:Node.jsのフォールバックトランスポートクライアントライブラリ付きWebSockets、AndroidおよびJava http://async-io.org
TakahikoKawasaki/nv-websocket-clientGitHubからの説明:Javaでの高品質WebSocketクライアント実装。
- square/okhttpGitHubからの説明:AndroidおよびJavaアプリケーション。 http://square.github.io/okhttp/ - Websocketモジュール があります。 scorpiodawgによる のように、OkHttpはバージョン3.5以降、組み込みのwebsocketサポートを備えています。
firebase/TubeSockGitHubからの説明:Javaで実装されたWebSocketクライアントライブラリ
Autobahn | Android ( GitHub )ウェブサイトからの説明:Autobahn | AndroidはオープンソースですネイティブモバイルWebSocket/WAMPクライアントを作成するためのWebSocketプロトコルとWeb Application Messaging Protocol(WAMP)を実装するAutobahnプロジェクトによって作成されたJava/Android用のネットワークライブラリ。 - cloudsurfinが指摘した これはwssをサポートしていない。
さらに、ネイティブの socket.io Android用クライアントライブラリがあります。
Socket.io Androidクライアントを使用することは、とにかくWebフロントエンドにnodejs/socket.ioを使用する予定なので、便利です。しかし、ネイティブクライアントは非常に若く、いくつかの未解決の問題があります。それに加えて、Androidアプリにはsocket.ioクライアントライブラリを使用するメリットはありません(socket.io 1.0サーバーと互換性があることを除けば)。クライアント側で安心してください。
私の要件は次のとおりです。
これらの要件に適したライブラリはどれですか?
その他の考慮事項:
TyrusはAndroidで動作します。ただし、Android 5.0で使用するSSLライブラリはバグがあり、 SSLハンドシェイクに失敗します です。これは新しいバージョンのAndroidで修正されるはずですが、多くのデバイスでAndroidが更新されないため、これは問題になる可能性があります。
他のwebsocket実装にSSLを実装する方法によっては、これも問題になる場合があります。
AndroidAsyncにはこのSSLの問題はありません。 タイムアウトを設定できない のような他の問題があります。
a)このファイルをgradleファイルに追加します
compile 'com.github.nkzawa:socket.io-client:0.3.0'
b)アプリケーションアクティビティに次の行を追加します。
public class MyApplication extends Application {
private Socket mSocket;
{
try {
mSocket = IO.socket(Config.getBaseURL());
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
public Socket getSocket() {
return mSocket;
}
}
c)WebSocketを呼び出したアクティビティにこの関数を追加します。
private void websocketConnection() {
//Get websocket from application
MyApplication app = (MyApplication ) getApplication();
mSocket = app.getSocket();
mSocket.on(Socket.EVENT_CONNECT, onConnect);
mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
mSocket.on("messageFromServer", onNewLocation);
mSocket.connect();
}
private Emitter.Listener onConnect = new Emitter.Listener() {
@Override
public void call(Object... args) {
runOnUiThread(() -> {
if (!isConnected) {
RequestSocket mRequestSocket = new RequestSocket();
mRequestSocket.setToken("anil_singhania");
/* your parameter */
mSocket.emit("messageFromClient", new Gson().toJson(mRequestSocket));
Log.i("Socket Data", new Gson().toJson(mRequestSocket));
isConnected = true;
}
});
}
};
private Emitter.Listener onDisconnect = args -> runOnUiThread(() -> {
isConnected = false;
/* Toast.makeText(getApplicationContext(),
R.string.disconnect, Toast.LENGTH_LONG).show();*/
});
private Emitter.Listener onConnectError = args -> runOnUiThread(() -> {
/* Toast.makeText(getApplicationContext(),
R.string.error_connect, Toast.LENGTH_LONG).show()*/
});
private Emitter.Listener onNewLocation = new Emitter.Listener() {
@Override
public void call(final Object... args) {
runOnUiThread(() -> {
});
}
};