公式に載ってないハマりポイントがあったのでまとめます。
HTTP V1 API
FCMではHTTP V1 APIが提供されておりAPI経由でプッシュを配信することができます。
HTTP V1 APIの準備はこちらみれば大体できます。
以前の HTTP から HTTP v1 に移行する | Firebase
プッシュを送るときに payloadとして下記の構造体であらゆるデータを送ることができるのですが、この中にfcm_options
に analytics_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レポートからデータを見ることができます。
フィルタからラベルでフィルタリングできるようなのでみてみるとさっき送った test_label
は出てきません。
data の中にも analytics_labelが必要
色々試してみたところ、構造体のdataの中にもanalytics_label
をつけることでうまくFCMにラベルが渡るようでした。
ここでの注意はdata
、fcm_options
両方に必要だということ。どちらか片方では動きません。
{ "message": { "data": { "analytics_label":"test_label" <- ここにもanalytics_labelを追加 }, "notification": { "title": "テストメッセージ", "body": "テストメッセージが入ります" }, "fcm_options": { "analytics_label": "test_label" }, "token": ACCESS_TOKEN } }
これでプッシュを送ってみたところフィルタにラベルが表示されました。
(なんでなんだ。。。) 公式見るとこんなことは書いてないのでワークアラウンドな対応な気がしますが、これでよしとします。