機能の中にチャットモジュールがあるAndroidアプリを書いています。ロングポーリングを使用してチャットを実装することを選択しました。
ユーザーの携帯電話のバッテリーを食い尽くすのを避けようとしているので、新しいメッセージについてデバイスに通知する GCM メッセージ プラットフォームを実装に追加することを考えました。
アイデアは、ユーザーが画面でアプリを開いている間にロングポーリングを使用することです。これにより、リアルタイムチャットが高速になり、多くの GCM メッセージを送信する必要がなくなります。アイドル状態のとき、サーバーはユーザーが現在ポーリングしておらず、デバイスに GCM メッセージを送信して、新しいメッセージが到着したときにウェイクアップします。
この方法を実装するいくつかの問題に苦しんでいます。
ユーザーのステータスを知る最善の方法は何ですか - 彼は今ポーリングしているのか、それともプッシュメッセージが起動するのを待っているのか. スリープ状態になったときにサーバーに通知するようにアプリを設定する必要がありますか、それともサーバーがそれを自動的に検出する必要がありますか?
モードを切り替えるタイミングをアプリがサーバーに通知するように設定した場合、この通知が届かなかった場合に回復するにはどうすればよいですか。(クライアントがgcmを待っていて、サーバーがポーリングしていると判断して送信しない場合..)
クライアントがポーリングしていて、新しいメッセージを受信してもサーバーが応答しない場合がありました。クライアントが認識していないサーバー上のある種のタイムアウトかもしれません...それがバグである場合は修正しますが、サーバーが認識していない間にクライアントがポーリングしていると考えている場合はどうすればよいですか (要求のタイムアウトが長すぎて、次のポーリングを待機できません)。
私のクライアントはネイティブの Android で、Web サービスは WCF (C#) です。
どんな考えでも役に立ちます。