Googleはプッシュ通知機能をどのように実装しましたか?バックグラウンドで実行されているサービスまたは別の方法で実行されているポーリングによって機能しますか?
イスラエルでのAndroid開発者会議で聞いたことから:
クラウドGoogleサーバーには、 受け入れモード で待機しているTCPソケットがあります。 TCP接続は、Google Playアプリケーションによって開始されました。 Google Cloud Messaging(GCM) (以前のAndroid Cloud to Device Messaging Service- C2DM )を機能させるには、デバイスにGoogle Playをインストールする必要があります。 。
このTCPクライアントソケットが何らかのメッセージを受信すると、メッセージには、アドレス指定する必要があるアプリケーションのパッケージ名などの情報、およびもちろんデータ自体が含まれます。このデータは解析され、 意図 にパックされます。これはブロードキャストされ、最終的にアプリケーションによって受信されます。
デバイスの無線状態が「アイドル」モードに変わっても、TCPソケットは開いたままです。インテントを受け取るためにアプリケーションを実行する必要はありません。
AndroidはGoogleのサーバーへの1つのアクティブな接続を維持しますが、スマートフォンのアプリにGoogle Cloud Messaging(GCM)メッセージが送信されるまでトラフィックは送信されないため、電力やデータをあまり使用しません。電話には、すべてのアプリで使用される接続が1つだけあります。GCMを使用する新しいアプリをインストールしても、追加の負荷はかかりません。
GCMの最初のステップは、サードパーティのサーバー(電子メールサーバーなど)がGoogleのGCMサーバーにリクエストを送信することです。このサーバーは、そのオープン接続を介してデバイスにメッセージを送信します。 Androidシステムは、メッセージを見てどのアプリ向けかを判断し、そのアプリを起動します。 GCMを使用するには、アプリがAndroidに登録されている必要があり、関連する権限が必要です。アプリを起動すると、メッセージのデータを使用してすぐに通知が作成される場合があります。 GCMメッセージのサイズは非常に制限されているため、アプリは代わりにサードパーティサーバーへの通常の接続を開いて、より多くの情報を取得します(たとえば、新しいメールのヘッダーをダウンロードします)。
プッシュ通知を使用する利点は、新しいデータを確認するためにアプリを定期的に実行する必要がなく、電力とデータの両方を節約できることです。 GCMのような一元化されたメカニズムを持つことの利点は、デバイスが1つのオープンネットワーク接続のみを必要とし、Android GCMシステムのみが実行を継続する必要があることです。独自のサーバーへの独自のネットワーク接続を維持するための背景。
長いポーリングtcp接続を使用して、プッシュ通知をAndroidに自分で実装できます。ただし、追加のソケット=>バッテリードレインを維持する必要があります。または、Alarm Managerを使用して定期的に接続を開くことができます。
GoogleはおそらくすべてのC2DMプッシュ通知用に1つのソケットを開くため、バッテリー効率が向上します。
2018年4月10日の時点で、GoogleはGCMを廃止しました。 GCMサーバーとクライアントAPIは廃止され、2019年4月11日をもって削除されます。GCMアプリをFirebase Cloud Messaging(FCM)に移行します。
はい、あなたが正しい。 Googleにはサービス(GTalkサービス)があり、このサービスは一定期間Googleサーバーに問い合わせました。