次の方法で共有


Google Cloud Messaging

警告

Google は、2018 年 4 月 10 日の時点で GCM を非推奨としました。 次のドキュメントとサンプル プロジェクトはメンテナンスされなくなる可能性があります。 Google の GCM サーバーとクライアント API は、2019 年 5 月 29 日にすぐに削除されます。 Google では、GCM アプリを Firebase Cloud Messaging (FCM) に移行することを推奨しています。 GCM の非推奨と移行の詳細については、非推奨の Google Cloud Messaging の説明を参照してください。

Xamarin で Firebase Cloud Messaging の使用を開始するには、「Firebase Cloud Messaging 」を参照してください。

Google Cloud Messaging (GCM) は、モバイル アプリとサーバー アプリケーション間のメッセージングを容易にするサービスです。 この記事では、GCM のしくみの概要と、アプリで GCM を使用できるように Google サービスを構成する方法について説明します。

Google Cloud Messaging logo

このトピックでは、Google Cloud Messaging がアプリとアプリ サーバーの間でメッセージをルーティングする方法の概要について説明します。また、アプリで GCM サービスを使用できるように、資格情報を取得するための手順について説明します。

概要

Google Cloud Messaging (GCM) は、サーバー アプリケーションとモバイル クライアント アプリ間のメッセージの送信、ルーティング、キュー処理を処理するサービスです。 "クライアント アプリ" は、デバイス上で実行される GCM 対応アプリです。 "アプリ サーバー" (ユーザーまたは会社によって提供) は、クライアント アプリが GCM を介して通信する GCM 対応サーバーです。

GCM resides between the client app and the app server

GCM を使用すると、アプリ サーバーは、1 つのデバイス、デバイスのグループ、またはトピックにサブスクライブされている多数のデバイスにメッセージを送信できます。 クライアント アプリでは、GCM を使用してアプリ サーバーからダウンストリーム メッセージをサブスクライブできます (たとえば、リモート通知を受信するため)。 また、GCM を使用すると、クライアント アプリがアップストリーム メッセージをアプリ サーバーに送り返すこともできます。

Google Cloud Messaging の動作

ダウンストリーム メッセージがアプリ サーバーからクライアント アプリに送信されると、アプリ サーバーからメッセージが "GCM 接続サーバー" に送信されます。GCM 接続サーバーから、クライアント アプリを実行しているデバイスにメッセージが転送されます。 メッセージは、HTTP または XMPP (Extensible Messaging and Presence Protocol) 経由で送信できます。 クライアント アプリは常に接続または実行されているとは限らないため、GCM 接続サーバーではメッセージをエンキューして格納し、再接続して使用可能になったときにクライアント アプリに送信します。 同様に、GCM では、アプリ サーバーが使用できない場合に、クライアント アプリからアプリ サーバーにアップストリーム メッセージをエンキューします。

GCM では、次の資格情報を使用してアプリ サーバーとクライアント アプリを識別し、これらの資格情報を使用して GCM を介してメッセージ トランザクションを認可します。

  • API キー – "API キー" を使用すると、アプリ サーバーは Google サービスにアクセスできます。GCM では、このキーを使用してアプリ サーバーを認証します。 GCM サービスを使用するには、まず "プロジェクト" を作成して Google デベロッパー コンソールから API キーを取得する必要があります。 API キーはセキュリティで保護する必要があります。API キーの保護の詳細については、API キーを安全に使用するためのベスト プラクティスに関するページを参照してください。

  • 送信者 ID – "送信者 ID" は、クライアント アプリに対してアプリ サーバーを認可します。これは、クライアント アプリへのメッセージの送信が許可されているアプリ サーバーを識別する一意の番号です。 送信者 ID はプロジェクト番号でもあります。プロジェクトを登録するときに、Google デベロッパー コンソールから送信者 ID を取得します。

  • 登録トークン – "登録トークン" は、特定のデバイス上のクライアント アプリの GCM ID です。 登録トークンは実行時に生成されます。アプリは、デバイスでの実行中に最初に GCM に登録するときに登録トークンを受け取ります。 登録トークンは、(その特定のデバイスで実行されている) クライアント アプリのインスタンスが GCM からメッセージを受信することを認可します。

  • アプリケーション ID – GCM からメッセージを受信するために登録するクライアント アプリの ID (特定のデバイスに依存しません)。 Android では、アプリケーション ID は、com.xamarin.gcmexample など、AndroidManifest.xml に記録されたパッケージ名です。

Google Cloud Messaging の設定」(このガイドの後半) では、プロジェクトを作成し、これらの資格情報を生成するための詳細な手順について説明します。

次のセクションでは、クライアント アプリが GCM を介してアプリ サーバーと通信するときに、これらの資格情報がどのように使用されるかについて説明します。

GCM との登録

デバイスにインストールされているクライアント アプリは、メッセージングを実行する前に、まず GCM に登録する必要があります。 クライアント アプリは、次の図に示す登録手順を完了する必要があります。

App registration steps

  1. クライアント アプリでは GCM への通信で登録トークンを取得し、送信者 ID を GCM に渡します。

  2. GCM から、登録トークンがクライアント アプリに返されます。

  3. クライアント アプリから、登録トークンがアプリ サーバーに転送される。

アプリ サーバーで、クライアント アプリとの後続の通信のために登録トークンがキャッシュされます。 必要に応じて、アプリ サーバーからクライアント アプリに受信確認を送信して、登録トークンが受信されたことを示すことができます。 このハンドシェイクが行われた後、クライアント アプリではアプリ サーバーからメッセージを受信 (またはメッセージを送信) できます。

クライアント アプリがアプリ サーバーからメッセージを受信することを望まない場合は、登録トークンを削除する要求をアプリ サーバーに送信できます。 クライアント アプリがトピック メッセージを受信している場合 (この記事の後半で説明します)、トピックの登録を解除できます。 クライアント アプリがデバイスからアンインストールされた場合、GCM はこれを検出し、登録トークンを削除するようにアプリ サーバーに自動的に通知します。

ダウンストリーム メッセージング

アプリ サーバーがダウンストリーム メッセージをクライアント アプリに送信する場合は、次の図に示す手順に従います。

Downstream messaging store and forward diagram

  1. アプリ サーバーから GCM にメッセージが送信される。

  2. クライアント デバイスが使用できない場合、GCM サーバーでは後で送信するためにメッセージがキューに格納される。

  3. クライアント デバイスが使用可能になると、GCM からそのデバイス上のクライアント アプリにメッセージが送信される。

  4. クライアント アプリで GCM からメッセージを受信し、適切に処理する。 たとえば、メッセージがリモート通知の場合、メッセージはユーザーに表示される。

このメッセージング シナリオ (アプリ サーバーが 1 つのクライアント アプリにメッセージを送信する) では、メッセージの長さは最大 4 KB です。

Android でのダウンストリーム GCM メッセージの受信に関する詳細 (コード サンプルを含む) については、リモート通知に関するページを参照してください。

トピック メッセージング

"トピック メッセージング" はダウンストリーム メッセージングの一種であり、アプリ サーバーから、トピック (天気予報など) にサブスクライブする複数のクライアント アプリ デバイスに 1 つのメッセージが送信されます。 トピック メッセージの長さは最大 2 KB で、トピック メッセージングはアプリごとに最大 100 万個のサブスクリプションをサポートします。 GCM がトピック メッセージングにのみ使用されている場合、クライアント アプリから登録トークンをアプリ サーバーに送信する必要はありません。

グループ メッセージング

"グループ メッセージング" はダウンストリーム メッセージングの一種であり、アプリ サーバーから、1 つのグループに属する複数のクライアント アプリ デバイス (たとえば、1 人のユーザーに属するデバイスのグループ) に 1 つのメッセージが送信されます。 グループ メッセージの長さは、iOS デバイスの場合は最大 2 KB、Android デバイスの場合は最大 4 KB です。 グループは最大 20 人のメンバーに制限されています。

アップストリーム メッセージング

クライアント アプリが XMPP をサポートするサーバーに接続している場合、次の図に示すように、メッセージをアプリ サーバーに送り返すことができます。

Upstream messaging diagram

  1. クライアント アプリから、GCM XMPP 接続サーバーにメッセージが送信される。

  2. アプリ サーバーが切断されている場合、GCM サーバーで後で転送するためにメッセージをキューが格納される。

  3. アプリ サーバーが再接続されると、GCM からメッセージがアプリ サーバーに転送される。

  4. アプリ サーバーでメッセージの解析によりクライアント アプリの ID が確認され、メッセージの受信確認を行うために "ack" が GCM に送信される。

  5. アプリ サーバーでメッセージが処理される。

Google のアップストリーム メッセージに関するページでは、JSON でエンコードされたメッセージを構造化し、Google の XMPP ベースのクラウド接続サーバーを実行するアプリ サーバーに送信する方法について説明されています。

Google Cloud Messaging の設定

アプリで GCM サービスを使用するには、まず Google の GCM サーバーにアクセスするための資格情報を取得する必要があります。 次のセクションでは、このプロセスを完了するために必要な手順について説明します。

アプリで Google サービスを有効にする

  1. Google アカウント (Gmail アドレス) で Google Developers Console にサインインし、新しいプロジェクトを作成します。 既存のプロジェクトがある場合は、GCM 対応にするプロジェクトを選択します。 次の例では、XamarinGCM という名前の新しいプロジェクトが作成されます。

    Creating XamarinGCM project

  2. 次に、アプリのパッケージ名 (この例では、パッケージ名は com.xamarin.gcmexample) を入力し、[続行してサービスを選択および構成する] をクリックします。

    Entering the package name

    このパッケージ名は、アプリのアプリケーション ID でもあります。

  3. [サービスの選択と構成] セクションには、アプリに追加できる Google サービスが一覧表示されます。 [クラウド メッセージング] をクリックします。

    Choose Cloud Messaging

  4. 次に、[GOOGLE CLOUD MESSAGING を有効にする] をクリックします。

    Enable Google Cloud Messaging

  5. サーバー API キー送信者 ID がアプリ用に生成されます。 これらの値を記録し、[閉じる] をクリックします。

    Server API Key and Sender ID displayed

    API キーを保護します。パブリック使用を目的としたものではありません。 API キーが侵害された場合、認可されていないサーバーがクライアント アプリケーションにメッセージを発行する可能性があります。 API キーを安全に使用するためのベスト プラクティスには、API キーを保護するための便利なガイドラインが用意されています。

プロジェクト設定を表示する

Google Cloud コンソール にサインインしてプロジェクトを選択すると、いつでもプロジェクト設定を表示できます。 たとえば、ページの上部にあるプルダウン メニューでプロジェクトを選択することで、送信者 ID を表示できます (この例では、プロジェクトは XamarinGCM と呼ばれます)。 送信者 ID は、このスクリーンショットに示すようにプロジェクト番号です (ここでの送信者 ID は 9349932736)。

Viewing the Sender ID

API キーを表示するには、[API マネージャー] をクリックし、[資格情報] をクリックします。

Viewing the API key

関連項目

  • RFC 6120 および RFC 6121 では、拡張メッセージングおよびプレゼンス プロトコル (XMPP) について説明し、定義しています。

まとめ

この記事では、Google Cloud Messaging (GCM) の概要について説明しました。 アプリ サーバーとクライアント アプリの間のメッセージングを識別および認可するために使用されるさまざまな資格情報について説明しました。 最も一般的なメッセージング シナリオを示し、GCM サービスを使用するためにアプリを GCM に登録する手順を詳しく説明しました。