こんにちは、Androidエンジニアの "いけちょ" こと池田です。
この記事はkubell Advent Calendar 2025の4日目です。
kubell - Qiita Advent Calendar 2025 - Qiita
さて、先日Push通知に関する調査が必要になり、いろいろ調べた結果、FCMから送られてくるメッセージの優先度が下げられていることがわかりました。
優先度を下げられる条件はこのページに記載されていますが、簡単にいうと
「このメッセージはユーザーにすぐ通知が必要なので優先度:高です!」
といって高い優先度で配信しておきながら、ユーザー向けの通知(Push通知を表示・アプリ起動など)を行っていない場合
「ユーザーに何も表示していないということは優先度高くなさそうなので、通常の優先度に下げて配信しますね。」
という感じで優先度を下げられてしまい、いざ本当に高い優先度が必要な通知を表示しようとしたときに表示できなくなってしまいます。
で、実際にどの程度下げられているかを調査するため、FCM Data APIを使用し、モニタリングする仕組みを構築しましたのでご紹介します。
FCM Data API とは
正確には Firebase Cloud Messaging Data API で、Firebase Cloud Messaging のメッセージ配信に関する情報を取得できるAPIです。(Androidのみ対応)
こちらのAPIでは集計済みの数値が取得できますが、集計するためなのか取得できる情報は最新ではなく執筆時点ではおよそ1週間より前の情報になります。また、たまに集計されていない日もありました。
Firebase Cloud Messaging Data API
今回確認したい、「優先度が下げられた割合」は priorityLowered の値で確認できます。
手動で取得
実際にどのような値が取得できるかは、以下のページで確認できます。
※集計情報へのアクセス権限があるGoogleアカウントでの認証が必要です
Method: projects.androidApps.deliveryData.list | Firebase Cloud Messaging Data API
parentの値は projects/[プロジェクトID]/androidApps/[アプリ ID] を指定します。プロジェクトID、アプリIDは、Firebaseのコンソールから プロジェクトの設定 で確認できます。

モニタリングの構成
さて、手動でデータを確認することはできましたが、毎日手動で取得して記録するわけにもいきませんので、今回はGoogle Cloudの各種サービスとDatadogをつかってモニタリングするようにしました。

構成は、Cloud FunctionsでFCM Data APIを呼び出し、データを整形してDatadogに記録する処理を、Cloud Scheduler・Pub/Sub・Eventarcを使って毎日同じ時間に起動する実装です。
集計データは16:00〜17:00(JST)ごろに更新されているようなので、17:00に起動するようにしています。
モニタリングの成果
問題となっている 優先度が下げられた割合 をDatadogでモニタリングできるようになったので、不必要に優先度高で送信していたメッセージを通常の優先度に下げる対応を行ったところ、グラフではっきりと減少するのを確認できました!(まだ4%ほど優先度が下げられていますが…)

まとめ
FCM Data APIとDatadogを組み合わせて、メッセージの配信に関する情報を収集し、継続的にモニタリングできるようなりました。
また、モニタリングできる環境を整えておくことで、現状の把握と対応を行った時の効果を詳しく確認できるようになりました。
将来もしメトリクスが悪化したときにも、いつ変化があったかがわかるので原因の特定がしやすくなると思います。
通知周りでトラブルを抱えている方、通知の状況をモニタリングしたい方はこの記事を参考にしてみてください!
あと、Androidエンジニアを募集中です!
それ以外の職種もいろいろ募集中です!
明日はエンジニアリングマネージャーをしている折田 (@orimomo_147cm)がiOSチームについて何か書くようです!