247

Googleはプッシュ通知機能をどのように実装しましたか?バックグラウンドで実行されているサービスまたは別の方法で実行されているサービスによって実行されるポーリングを通じて機能しますか?

4

5 に答える 5

190

イスラエルでのAndroid開発者会議で聞いたことから:

クラウドGoogleサーバーで受け入れモードで待機しているTCPソケットがあります。TCP接続はGooglePlayアプリケーションによって開始されました。そのため、 Google Cloud Messaging(GCM)(以前のAndroid Cloud to Device Messaging Service- C2DM )を機能させるには、デバイスにGooglePlayをインストールする必要があります。

このTCPクライアントソケットが何らかのメッセージを受信すると、メッセージには、アドレス指定する必要のあるアプリケーションのパッケージ名や、もちろんデータ自体などの情報が含まれます。このデータは解析されてインテントにパックされ、ブロードキャストされて最終的にアプリケーションによって受信されます。

デバイスの無線状態が「アイドル」モードになっても、TCPソケットは開いたままになります。インテントを受信するためにアプリケーションを実行する必要はありません。

詳細については、http://developer.android.com/google/gcm/gcm.htmlをご覧ください。

于 2012-07-16T16:47:40.907 に答える
157

AndroidはGoogleのサーバーへのアクティブな接続を1つ維持しますが、何かがGoogle Cloud Messaging(GCM)メッセージを携帯電話のアプリに送信するまでトラフィックが送信されないため、電力やデータをあまり使用しません。電話には1つの接続しかなく、すべてのアプリで使用されます。GCMを使用する新しいアプリをインストールしても、余分な負荷はかかりません。

GCMの最初のステップは、サードパーティのサーバー(メールサーバーなど)がGoogleのGCMサーバーにリクエストを送信することです。次に、このサーバーは、開いている接続を介してメッセージをデバイスに送信します。Androidシステムはメッセージを確認して、対象のアプリを特定し、そのアプリを起動します。GCMを使用するには、アプリがAndroidに登録されている必要があり、関連する権限が必要です。アプリが起動すると、メッセージのデータを使用してすぐに通知が作成される場合があります。GCMメッセージのサイズは非常に限られているため、アプリは代わりにサードパーティサーバーへの通常の接続を開いて、より多くの情報を取得する場合があります(たとえば、新しいメールのヘッダーをダウンロードするなど)。

プッシュ通知を使用する利点は、新しいデータをチェックするためにアプリを定期的に実行する必要がないため、電力とデータの両方を節約できることです。GCMのような一元化されたメカニズムを持つことの利点は、デバイスに必要なオープンネットワーク接続が1つだけであり、Android GCMシステムだけが実行を継続する必要があることです。各アプリは、独自のネットワークを維持するためにバックグラウンドで実行を継続する必要はありません。独自のサーバーへの接続。

これを:ソースから取得しました。こちら も参照してください。

于 2014-05-12T08:35:41.407 に答える
11

長いポーリングtcp接続を使用して、Androidにプッシュ通知を自分で実装できます。しかし、それは余分なソケット=>バッテリーの消耗を維持することを含みます。または、アラームマネージャを使用して定期的に接続を開くことができます。

GoogleはおそらくすべてのC2DMプッシュ通知用に1つのソケットを開くため、バッテリー効率が高くなります。

于 2012-09-07T13:32:15.457 に答える
4

2018年4月10日の時点で、GoogleはGCMを廃止しました。GCMサーバーとクライアントAPIは廃止され、2019年4月11日をもって削除されます。GCMアプリをFirebase Cloud Messaging(FCM)に移行します。これは、信頼性が高くスケーラブルなGCMインフラストラクチャと多くの新機能を継承しています。

https://firebase.google.com/docs/cloud-messaging/

于 2018-10-29T17:51:15.297 に答える
1

はい、あなたが正しい。Googleにはサービス(GTalkサービス)があり、このサービスは一定期間Googleサーバーに問い合わせました。

于 2012-07-16T16:40:43.173 に答える