kako.dev

開発、自作アプリのこと

FCMで analytics_label を設定してプッシュごとの集計可能にする

公式に載ってないハマりポイントがあったのでまとめます。

HTTP V1 API

FCMではHTTP V1 APIが提供されておりAPI経由でプッシュを配信することができます。

HTTP V1 APIの準備はこちらみれば大体できます。

以前の HTTP から HTTP v1 に移行する  |  Firebase

プッシュを送るときに payloadとして下記の構造体であらゆるデータを送ることができるのですが、この中にfcm_optionsanalytics_label を設定することで集計に役立つラベルをつけることができます。 ……と公式には記載されているんですが、それだけだと十分にFCMにanalytics_labelが渡らないようです。(ここハマりポイント)

{
  "name": string,
  "data": {
    string: string,
    ...
  },
  "notification": {
    object (Notification)
  },
  "android": {
    object (AndroidConfig)
  },
  "webpush": {
    object (WebpushConfig)
  },
  "apns": {
    object (ApnsConfig)
  },
  "fcm_options": {
    object (FcmOptions)
  },

  // Union field target can be only one of the following:
  "token": string,
  "topic": string,
  "condition": string
  // End of list of possible types for union field target.
}

試しに送ってみる

試しにこういうデータを用意してプッシュを送ってみます。

{
  "message": {
    "notification": {
      "title": "テストメッセージ",
      "body": "テストメッセージが入ります"
    },
    "fcm_options": {
          "analytics_label": "test_label"
    },
    "token": ACCESS_TOKEN
  }
}

Firebaseのレポートを確認

FirebaseのCloudMessagingレポートからデータを見ることができます。

f:id:h3-birth:20210622014351p:plain

フィルタからラベルでフィルタリングできるようなのでみてみるとさっき送った test_labelは出てきません。

f:id:h3-birth:20210622014404p:plain
from-gui-testはFCMのGUIからプッシュ送った時につけたラベル……こっちはちゃんと表示される

data の中にも analytics_labelが必要

色々試してみたところ、構造体のdataの中にもanalytics_labelをつけることでうまくFCMにラベルが渡るようでした。

ここでの注意はdatafcm_options両方に必要だということ。どちらか片方では動きません。

{
  "message": {
    "data": {
        "analytics_label":"test_label" <- ここにもanalytics_labelを追加
    },
    "notification": {
      "title": "テストメッセージ",
      "body": "テストメッセージが入ります"
    },
    "fcm_options": {
          "analytics_label": "test_label"
    },
    "token": ACCESS_TOKEN
  }
}

これでプッシュを送ってみたところフィルタにラベルが表示されました。 f:id:h3-birth:20210622014938p:plain

(なんでなんだ。。。) 公式見るとこんなことは書いてないのでワークアラウンドな対応な気がしますが、これでよしとします。