web-dev-qa-db-ja.com

iOSおよびAndroidのFCMリモート通知ペイロード

FCMを使用して、iOSとAndroidの両方にリモート通知を送信しています。以下は、バックエンドから送信しているペイロードです。

options = {
     notification: {
          title: "title",
          body:  body,
          sound: 'default'
     },
    priority: "high",
    content_available: true,
    data: {
       type: 'type',
       id: id,
    }
}

これはiOSおよびAndroidで機能します。しかし、何らかの理由で、Android側では、titleペイロードのキーにbodysoundおよびdataを送信し、notificationペイロードを削除する必要があります。

これで、アプリがアクティブでないときに通知がiOS側で受信されなくなり、バナー通知が届きませんが、アプリがアクティブなときにデータが受信されます。 iOS側にバナーが必要です。

notificationキーはiOSでbannerを表示するために必須ですか?

IOSとAndroidの両方に同じペイロードを使用する方法。

options = {

priority: "high",
content_available: true,
data: {
      title: "title",
      body:  body,
      sound: 'default'
      type: 'type',
      id: id,
     }
}

また、さまざまな組み合わせでcontent_availableおよびpriorityキーを追加してみました。すべてのFCMドキュメントを調べてみると、まだ混乱しています。ヘルプ/提案に感謝します。

18
preetam

Platform Overrides と呼ばれる、特定のプラットフォームに特定のパラメーターを提供するオプションを提供するFCMの最新機能が追加されました

プラットフォーム間でメッセージをカスタマイズする

FCM v1 HTTPプロトコルによって送信されるメッセージには、2種類のJSONキーペアを含めることができます。

  • メッセージを受信するすべてのアプリインスタンスによって解釈される共通のキーセット。
  • 指定されたプラットフォームで実行されているアプリインスタンスによってのみ解釈されるキーのプラットフォーム固有のブロック。
  • プラットフォーム固有のブロックを使用すると、さまざまなプラットフォーム向けにメッセージを柔軟にカスタマイズして、受信時にメッセージが正しく処理されるようにすることができます。多くのシナリオでは、特定のメッセージで共通キーとプラットフォーム固有のキーの両方を使用するのが理にかなっています。

共通キーを使用する場合

  • IOS、Android、およびWebのすべてのプラットフォームでアプリインスタンスをターゲットにする場合
  • トピックにメッセージを送信するとき

プラットフォームに関係なく、すべてのアプリインスタンスによって解釈される共通キーは、message.notification.title、message.notification.body、およびmessage.dataです。

プラットフォーム固有のキーを使用する場合

  • 特定のプラットフォームにのみフィールドを送信する場合
  • 共通キーに加えてプラットフォーム固有のフィールドを送信するには

特定のプラットフォームにのみ値を送信する場合は、共通キーを使用しないでください。プラットフォーム固有のキーブロックを使用します。たとえば、AndroidではなくiOSとWebのみに通知を送信するには、iOS用とWeb用の2つの別々のキーブロックを使用する必要があります。

特定の配信オプションでメッセージを送信する場合は、プラットフォーム固有のキーを使用してそれらを設定します。必要に応じて、プラットフォームごとに異なる値を指定できます。ただし、プラットフォーム間で本質的に同じ値を設定する場合でも、プラットフォーム固有のキーを使用する必要があります。これは、各プラットフォームが値をわずかに異なる方法で解釈する可能性があるためです。たとえば、有効期間はAndroidに有効期限を秒単位で設定し、iOSでは有効期限として設定します。

例:プラットフォーム固有の配信オプションを含む通知メッセージ

次のv1送信リクエストは、共通の通知タイトルとコンテンツをすべてのプラットフォームに送信しますが、プラットフォーム固有のオーバーライドも送信します。具体的には、リクエスト:

  • AndroidおよびWebプラットフォームに長い生存期間を設定し、APN(iOS)メッセージの優先度を低い設定に設定する
  • 適切なキーを設定して、AndroidおよびiOS — click_action、およびcategory)の通知をユーザーがタップした結果を定義します。
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "Android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

メッセージ本文のプラットフォーム固有のブロックで使用可能なキーの詳細については、 HTTP v1リファレンスドキュメント を参照してください。メッセージ本文を含む送信要求の構築の詳細については、「 送信要求の構築 」を参照してください。

6
AL.