ADMメッセージのタイプ
Amazon Device Messaging(ADM)では、プッシュ通知(メッセージ)を使用して、アプリに関するメッセージをユーザーのデバイスに表示することができます。ADMメッセージを使用するには、まずアプリにADMを統合する必要があります。
メッセージのタイプ
ADMにおいて、メッセージは開発者のアプリとサーバー間の通信手段です。ADMでは、次の表に示す3種類のメッセージを使用できます。
| ADMメッセージのタイプ | 説明 | 使用例 | 
|---|---|---|
| データメッセージ | アプリで処理されるメッセージ。カスタムのキーと値のペアで定義されます。 | カスタムロジックを使用してメッセージを処理する場合に使用します。たとえば、データメッセージを使用して、アプリのバックグラウンドタスクにメッセージを送信することができます。 | 
| 通知メッセージ | ADM SDKで処理されるメッセージ。プリセットのキーと値のペアで定義されます。 | プロモーション特典やマーケティング通知など、ユーザーに自動的に表示されるメッセージに使用します。 | 
| データを含む通知メッセージ | カスタムのキーと値のペアから成るデータメッセージペイロードも含んだ通知メッセージ。 | ユーザーによるアクションが可能なメッセージを自動的に表示する場合に使用します。たとえば、ユーザーのカート内のアイテムに適用可能なプロモーション特典があるというメッセージを送信することができます。ユーザーがメッセージに対処すると、プロモーションコードを要求するページに遷移します。特典に関するメッセージは通知メッセージであり、プロモーションコードを要求する2番目のページはカスタムロジックを含むデータメッセージです。 | 
各メッセージタイプの詳細については、以下のセクションを参照してください。
データメッセージ
データメッセージは、カスタムロジックを使用して作成されるADMメッセージで、ADMを介してデバイスに渡されます。この通知のロジックはアプリで構成する必要があります。dataメッセージのメッセージペイロードの例を以下に示します。
{
    "data":
    {
        "key1":"value1",
        "key2":"value2"
    },
    "consolidationKey":"Some Key",
    "expiresAfter":86400
}
詳細については、メッセージの送信方法を参照してください。
通知メッセージ
ADM通知は、ADMからユーザーのデバイスに送信されるメッセージです。メッセージの処理と通知の送信は、ADM SDKが開発者に代わって行います。
プログラムで通知メッセージを送信するには、notificationキーを設定し、ユーザーに表示されるメッセージのキーと値のペアを追加します。たとえば、「新しい特典があります」などの通知メッセージを次のように設定できます。
{
    "notification":
    {
        "title":"ADMメッセージ通知",      
        "body":"新しい特典があります"
    }
    "expiresAfter":86400
}
通知メッセージでは、事前に定義されたキーと値のペアを使用する必要があります。ADM通知でサポートされるキーと値のペアを次の表に示します。
| フィールド | 型 | 説明 | 
|---|---|---|
| title | string | 通知のタイトル。 | 
| body | string | 通知の本文テキスト。 | 
| icon | string | 通知のアイコン。通知アイコンをmyicon(ドローワブルリソースのmyicon)に設定します。リクエストでこのキーを送信しない場合は、アプリのマニフェストで指定されたランチャーアイコンが表示されます。 | 
| color | string | 通知アイコンの色(#rrggbb形式を使用)。 | 
| sound | string | デバイスが通知を受信したときに再生されるサウンド。「default」、またはアプリにバンドルされたサウンドリソースのファイル名を指定できます。サウンドファイルは、必ず/res/raw/に保存してください。 | 
| tag | string | 通知ドロワーにある既存の通知を置き換えるために使用する識別子。指定がない場合は、リクエストごとに新しい通知が作成されます。指定されている場合は、同じタグを持つ通知が既に表示されていれば、通知ドロワー内の既存の通知が新しい通知に置き換えられます。 | 
| click_action | string | ユーザーが通知をクリックしたときに実行されるアクション。指定されている場合は、ユーザーが通知をクリックすると、一致するインテントフィルターを持つアクティビティが起動されます。 | 
| body_loc_key | string | アプリの文字列リソースの本文文字列へのキー。本文テキストをユーザーの現在の言語にローカライズするために使用します。 | 
| body_loc_args[] | string | body_loc_keyで指定された書式指定子を置き換える可変文字列値。本文テキストをユーザーの現在の言語にローカライズするために使用します。 | 
| title_loc_key | string | アプリの文字列リソースのタイトル文字列へのキー。タイトルテキストをユーザーの現在の言語にローカライズするために使用します。 | 
| title_loc_args[] | string | title_loc_keyで指定された書式指定子を置き換える可変文字列値。タイトルテキストをユーザーの現在の言語にローカライズするために使用します。 | 
| channel_id | string | 通知のチャネルID(Android Oの新機能)。このチャネルIDを持つ通知を受信するには、アプリで事前にこのチャネルIDのチャネルを作成しておく必要があります。リクエストでこのチャネルIDを送信しない場合、または指定されたチャネルIDがアプリで作成されていない場合は、アプリのマニフェストで指定されたチャネルIDがFCMで使用されます。 | 
| ticker | string | アクセシビリティサービスに送信される「ティッカー」テキストを設定します。APIレベル21(Lollipop)以前の場合は、通知が最初に届いたときにステータスバーに表示されるテキストを設定します。 | 
| sticky | boolean | falseに設定した場合、または設定されていない場合は、ユーザーがパネルで通知をクリックすると、通知が自動的に消去されます。trueに設定した場合は、ユーザーがパネルで通知をクリックしても、通知は表示されたままになります。 | 
| event_time | string(Timestamp形式) | 通知のイベントが発生した時刻を設定します。パネル内の通知はこの時刻を基準にソートされます。この時刻は、protobuf.Timestamp(ナノ秒単位のRFC3339 UTC「Zulu」形式のタイムスタンプ)を使用して表されます。例: "2014-10-02T15:01:23.045123456Z" | 
| local_only | boolean | この通知を現在のデバイスのみに関連付けるかどうかを設定します。通知によっては、リモート表示用のほかのデバイス(Wear OS搭載スマートウォッチなど)にブリッジさせることができます。このヒントを設定して、この通知をブリッジしないよう促すことができます。 | 
| notification_priority | enum(NotificationPriority) | この通知の相対的優先度を設定します。優先度は、この通知にユーザーの注意を引く必要がどの程度あるかを示します。優先度の低い通知は特定の状況ではユーザーに表示されないことがありますが、優先度の高い通知はユーザーの操作中でも前面に表示されることがあります。同じ優先度が設定されている場合でも、プラットフォームによって動作が若干異なる場合があります。この優先度はAndroidMessagePriorityとは異なることに注意してください。FCMの概念であるAndroidMessagePriorityはメッセージの配信タイミングを制御するものですが、この優先度はメッセージの配信後にクライアントによって処理されるものです。 | 
| default_sound | boolean | trueに設定した場合、Androidフレームワークのデフォルトのサウンドが通知に使用されます。デフォルト値はconfig.xmlで指定されています。 | 
| visibility | enum(Visibility) | 通知のNotification.visibilityを設定します。 | 
| notification_count | integer | この通知で表示されるアイテムの数を設定します。バッジをサポートするランチャーでバッジ数として表示できます。たとえば、1つの通知で複数の新規メッセージを表示する際、新規メッセージの合計数をバッジで表示したい場合などに役立ちます。0を指定した場合、または指定がない場合は、バッジをサポートするシステムによってデフォルト(新しい通知が届くたびに長押しメニューに表示する数をインクリメントするための値)が使用されます。 | 
| image | string | 通知に表示される画像のURLを指定します。指定した場合、google.firebase.fcm.v1.Notification.imageがオーバーライドされます。 | 
メッセージペイロードの定義の詳細については、メッセージの送信方法を参照してください。
データメッセージと通知メッセージ
notificationペイロードとdataペイロードを構成して、データメッセージのキーと値のペアを含む通知メッセージを送信することもできます。このシナリオでは、通知メッセージはADM SDKで処理され、データメッセージペイロードはアプリで処理されます。
通知メッセージとデータメッセージの両方を含むメッセージペイロードの例を以下に示します。
{
    "data":
    {
        "key1":"value1",
        "key2":"value2"
    },
    "notification":
    {
        "title":"ADMメッセージ通知",      
        "body":"新しい特典があります"
    }
    "expiresAfter":86400
}  
メッセージの動作
ADM SDKでは、メッセージの処理はonMessageメソッドで行われます。デバイスでのADMメッセージの動作は、アプリの状態(アプリがバックグラウンドにあるかフォアグラウンドにあるか)によって異なります。
フォアグラウンドのアプリは、デバイスがメッセージを受信すると、データメッセージと通知メッセージの両方のメッセージペイロードを受け取ります。バックグラウンドのアプリは、システムトレイで通知ペイロードを受け取り、ユーザーが通知をタップしたらメッセージを配信します。
アプリの状態に基づくメッセージの動作を次の表に示します。
| アプリの状態 | 通知メッセージ | データメッセージ | データを含む通知メッセージ | 
|---|---|---|---|
| フォアグラウンド | onMessage | onMessage | onMessage | 
| バックグラウンド | システムトレイ | onMessage | 通知メッセージ:システムトレイ データメッセージ:インテントのエクストラ内 | 
メッセージの優先度
データメッセージおよび通知メッセージには、normal(通常)とhigh(高)の2つの優先度があります。どちらのメッセージタイプも、デフォルトの優先度はnormalです。
優先度がnormalのメッセージは、アプリがフォアグラウンドにある場合はすぐに配信されます。デバイスがDozeモードの場合は、アプリがフォアグラウンドに移行するまで配信が先送りされます。
優先度がhighのメッセージは、ユーザーのデバイスの状態に関係なく、ADMによって即時配信が試みられます。アプリが1日に受信できる優先度highのメッセージの数は、アプリスタンバイバケットに基づいて制限されます。
メッセージの優先度を設定するには、priorityパラメーターを使用します。優先度がhighのメッセージのリクエスト例を以下に示します。
{
    "data":{"key1":"value1","key2":"value2"},
    "priority":"high"
    "expiresAfter":86400
}
詳細については、メッセージの送信方法を参照してください。
ADMの統合に関するテスト
デバイスにテスト通知を送信することで、アプリにADMがセットアップされていることを確認できます。詳細については、メッセージの送信方法を参照してください。
Last updated: 2022年6月8日

