Amazon Device Messaging(ADM)について


Amazon Device Messaging(ADM)について

Amazon Device Messaging(ADM)を使用すると、アプリを実行するAmazonデバイスにメッセージを送信することができます。これにより、ユーザーに最新の情報を提供し、アクションにつながる働きかけを行うことが可能になります。ゲームのアップデート情報を提供したり、友人からメッセージが届いたことを知らせたり、ADMをユーザーとの継続的なコミュニケーションに役立ててください。

アーキテクチャ

ADMのアーキテクチャには、次のような特徴があります。

保護されている: 開発者サーバーは、OAuth 2.0クライアントの認証フローで認証されます。メッセージがデバイスに渡されると、エンドポイント接続の認証が行われ、業界標準のSSL暗号化で保護されます。ADMはデバイスのAndroid権限を使用して、メッセージを対象アプリのみに送信します。

シンプル: ADMは、メッセージデータをアプリに配信する転送メカニズムです。組み込みのユーザーインターフェイスや、そのほかのデータ処理機能はありません。たとえば、アプリがメッセージを受信した際に、デバイスのスリープ解除、通知の表示、カスタムユーザーインターフェイスの表示、データの同期などを実行できます。

フレキシブル: ADMは、送信されたデータの処理は一切行いません。メッセージに対して求められることは、サイズが6KBを超えないことと、JSONObjectのキー:値ペア形式でデータを送信することだけです。

ADMを介して送信するメッセージには、次のような特徴もあります。

  • ADMは、メッセージを配信するためにデバイスのスリープ状態を解除します。
  • ADMではメッセージの配信や順序が保証されません。
  • ネットワーク状況の変化により、メッセージは複数回配信される場合があります。アプリがメッセージの重複インスタンスを処理できるようにしておいてください。
  • メッセージには有効期限があります。デフォルトの有効期限は1週間、最大値は1か月です。メッセージ送信時に有効期限をカスタム設定することが可能で、有効期限が切れたメッセージは配信キューから削除されることがあります。

役割とその内容

ADM経由のメッセージ送信には、4つのコンポーネントが使用されます。そのうち2つは、開発者側で制御が可能です。

開発者サーバー

  • アクセストークンを使用して、自身のIDをADMサーバーに示します。
  • アプリに配信するメッセージをADMサーバーに送信します。

ADMサーバー

  • アクセストークンを使用して、開発者サーバーのIDを確認します。
  • 開発者サーバーからデバイス上のADMクライアントにメッセージを配信します。

ADMクライアント

  • ADMサーバーに関するアプリの登録プロセスを処理します。
  • ADMサーバーからメッセージを受信して、アプリに渡します。

アプリ

  • 開発者サーバーからメッセージを受信できるよう、ADMクライアントに登録します。
  • 着信メッセージをADMクライアントから受信して処理します。

メッセージフロー

ADM経由のメッセージ配信フローを大まかに示すと、次のようになります。

  1. 開発者サーバーが、JSONデータを含むメッセージをADMサーバーに送信します。
  2. ADMサーバーから、アプリがインストールされたデバイスのADMクライアントにそのメッセージが送信されます。
  3. ADMクライアントは、JSON形式のメッセージデータを取得し、それをAndroidのIntentオブジェクトにアタッチされた一連のエクストラとしてアプリに渡します。
understanding-adm
開発者サーバーからアプリインスタンスまでのメッセージ経路

IDとセキュリティ

ADMを使用する場合は、開発者サーバー・アプリ・メッセージの宛先を識別するために以下の要素を組み合わせ、データのセキュリティも確保します。

登録ID: 登録IDは、特定のユーザーに紐付けられた特定のデバイスで使われるアプリのインスタンスを識別します。アプリが初めてデバイスにインストールされると、アプリによってADMに登録IDがリクエストされます(アプリを統合するを参照)。開発者サーバーはその登録IDを使用して、適切なデバイスやユーザーにメッセージを送信します。ユーザーがアプリをアンインストールして同じデバイスに再インストールした場合、アプリの登録IDが変わる場合もあります。

APIキー: APIキーは、デバイス上で対象のアプリを識別するためにADMが使用するメタデータです。APIキーはAmazonから開発者に割り当てられます。詳細については、認証情報を取得するを参照してください。

OAuthクライアント認証情報: クライアントの認証情報は「クライアント識別子」と「クライアントシークレット」の値で構成され、Amazonから開発者に割り当てられます。詳細については、認証情報を取得するを参照してください。開発者サーバーは、リクエスト内でこの認証情報を使用して、アクセストークンを取得します。

アクセストークン: アクセストークンは、メッセージを送信できるように、開発者サーバーの識別情報をADMに対して確認するための一時的なメタデータです。開発者サーバーは、ADMサーバーへのリクエスト呼び出しでクライアント認証情報を提供することにより、アクセストークンを取得します。開発者サーバーがアクセストークンをリクエストした場合、アクセストークンとその存続期間(秒単位)の情報が記載されたレスポンスが返されます。詳細については、アクセストークンをリクエストするを参照してください。

表1: ADMの識別子と認証情報

ID/認証情報 取得するのは... 提供するのは... 使用するのは... 一意性
登録ID アプリのインスタンス ADMサーバー。アプリインスタンスがインストールされたデバイスのADMクライアントを介して提供されます。 開発者サーバー、ADMサーバー、ADMクライアント。アプリの適切なインスタンスにメッセージをルーティングするために使用されます。 ユーザー、デバイス、アプリのインストールごとに一意。登録IDが無効または非アクティブになると、その登録IDへのメッセージ送信は失敗となり、ADMから適切なエラーメッセージが返されます。たとえば、ユーザーがアプリをアンインストールしてから再度インストールした場合、登録IDが新しくなる可能性があります。
APIキー 開発者(アプリ用) Amazon。このプロセスの詳細については、認証情報を取得するを参照してください。 ADMクライアント。アプリのID確認に使用されます。 アプリの異なるバージョン(デバッグバージョンと実稼働バージョンなど)では、それぞれ別のAPIキーが必要になります。
OAuthクライアント認証情報 開発者(開発者サーバー用) Amazon。このプロセスの詳細については、認証情報を取得するを参照してください。 開発者サーバーとADMサーバー。アクセストークンを取得する目的で、サーバーを識別するために使用されます。 アプリごとに一意。
アクセストークン 開発者サーバー ADMサーバー。リクエスト呼び出しの応答時に提供されます。 開発者サーバーとADMサーバー。メッセージを送信できるか確認するために使用されます。 各開発者サーバーで使われるアクセストークンは一度に1つだけです。以前取得したアクセストークンが有効期限切れになれば、新たに取得しなければなりません。