ADMの概要

Amazon Device Messaging (ADM) を使用すると、アプリを実行するAmazon端末にメッセージを送信できます。これにより、ユーザーに最新の情報を提供し、アクションにつながる働きかけを行うことが可能になります。ADMを使用してユーザーにゲームのアップデートを提供したり、友達からのメッセージが到着したことを知らせることによって、ユーザーとの接触を維持できます。

アーキテクチャ

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

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

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

柔軟: ADMは、送信されたデータの処理は一切行いません。メッセージに対して求められることは、サイズが6 KBを超えないことと、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によって開発者に割り当てられます。詳細については、認証情報を取得するを参照してください。開発者サーバーは、リクエスト内でこれら2つの認証情報を使用して、アクセストークンを取得します。

アクセストークン: アクセストークンは、メッセージを送信できるように、開発者サーバーの識別情報を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つだけです。以前のアクセストークンが期限切れになったら新しいアクセストークンを取得する必要があります。