私はAndroidアプリを持っていますが、インスタントメッセージは重要な機能の1つです。 IM機能を実装するには、websocket
に基づくプッシュサーバーを使用します。WebSocketの接続を維持するにはどうすればいいですか?
私のアプリでは、PushServiceがあります。このサービスでは、プッシュサーバーに接続しプッシュメッセージを受け取るwebsocket
接続を確立します。
コードはフォアグラウンドでは効果的です(つまり、ユーザーがアプリを操作しているときにうまく機能します)が、フォアグラウンドでないとプッシュメッセージの受信を停止します(約1分)。ユーザーが画面をオフにすると同じ問題が発生します。
私はAlarmManager
でリピートタスクを設定しました。これは接続状態でない場合はwebsocket
の接続状態をチェックしてからプッシュメッセージを受信するために接続を再試行します。
これは、Android携帯電話上で5例えば、うまくアンドロイドMの下に動作しますが、それはあまりプッシュメッセージを見逃しません。しかし、Android M/Android Nでは、Android 5.xほどうまく動作しません。私は、サービス自体が実行し続けていることを確認できます。「実行中のサービス」からチェックしてください。
私は、Android Mから始まることに気付きました、Androidのは、それらが関連しているかどうかわから、ドーズとスタンバイモードにしませ紹介し、そうならば、どのように私はアプリが再び作業を続けることができますか?私の電話では、WeChatとSkype Android Appはうまくいきますが、その背後にあるメカニズムは何ですか?私はFCMが最善の解決策だと知っていますが、私はそれを中国の顧客に使うことはできないので、回避策が必要です。
編集:私はフォアグラウンドサービスを利用することを提案していたが、PMはいつも、彼はきれいにしておきたい、ステータスバーに表示されている通知トレイが好きではありません。
アドバイスをいただければ幸いです!
道具でXMPP通信プロトコルをジャベル・サーバを使用して。この前の質問はあなたを助けるかもしれません:https://stackoverflow.com/q/46780547/2012017 –
@JustinHeath、あなたのコメントをありがとう。フォアグラウンドサービスを使用するPMを提案しましたが、ステータスバーをきれいに保つために通知トレイが気に入らないので、拒否されました。 (フォアグラウンドを使わないように質問を編集します) –