Android では、ダウンストリーム メッセージに配信の優先度を割り当てるオプションとして、標準(normal)と高(high)の 2 つの優先度があります。標準の優先度と高い優先度のメッセージの配信は、次のように行われます。
優先度: 標準。データ メッセージのデフォルトの優先度です。デバイスがスリープしていない場合、優先度が標準のメッセージはすぐに配信されます。デバイスが Doze モードの場合は、バッテリーを節約するために Doze モードが終了するまで配信が延期されることがあります。新着メールの通知、UI の同期の維持の通知、バックグラウンドでのアプリデータの同期の通知など、緊急度の低いメッセージでは、標準の配信優先度を選択します。
バックグラウンドでのデータ同期をアプリにリクエストする標準優先度のメッセージを Android で受け取る場合は、 WorkManager を使用してタスクのスケジュールを設定し、ネットワークが利用可能になったときにその処理を行えます。
優先度: 高。優先度の高いメッセージは、FCM によって即時配信が試みられます。その際に FCM は、スリープ状態のデバイスを必要に応じてアクティブにしたり、限られた処理(ごく限定的なネットワーク アクセスなど)を行ったりすることが可能です。通常、優先度の高いメッセージが配信されると、ユーザーによるアプリの操作やその通知の操作が行われることになります。
Android でのメッセージの処理と優先度の低下
Android において優先度の高いメッセージは、なるべく早くユーザーに確認してもらう必要のあるコンテンツ向けであり、ユーザーに対する通知の表示が行われます。FCM によって、ユーザーに対する通知の表示を行うべきでないメッセージのパターンが検出された場合、そのメッセージの優先度は通常の優先度に下げられることがあります。また、Google Play 開発者サービスの処理に委任されることもあります。
FCM は、メッセージの優先度を下げるかプロキシするかを判断する際に、過去 7 日間のメッセージの動作を使用します。この決定はアプリケーションのインスタンスごとに独立して行われます。優先度の高いメッセージに対応して、ユーザーに対する通知の表示が行われた場合、その後の優先度の高いメッセージに影響を与えることはありません。
Google Play 開発者サービスでの通知の委任
特定の条件を満たす優先度の高い通知メッセージ(データ メッセージではない)は、優先度が下げられるのではなく、Google Play 開発者サービスによってプロキシされます。つまり、アプリを起動することなく、アプリに代わって Google Play 開発者サービスによって通知が表示されます。これは、Android デバイスで全体的なユーザー エクスペリエンスを向上させるためです。
プロキシされた通知メッセージにより、受信されるメッセージに関連するアナリティクスが報告される方法が変更されることに注意してください。
- プロキシ通知のアナリティクスをレポートするには、アプリで FCM SDK バージョン 24.0.0 以降を使用する必要があります。
- プロキシ通知の導入前と比較して、受信するメッセージの数が遅れたり減ったりすることがあります。これは、プロキシ通知のアナリティクスはアプリの起動時にのみレポートされるためです。通知によってアプリが開かれなかった場合は、レポートがまったく行われないこともあります。
Android Q 以降と Google Play 開発者サービス バージョン 19054000 以降を使用するアプリでは、この方法で通知メッセージをプロキシするのがデフォルトの動作です。HTTP v1 API を介して送信されたメッセージはプロキシされますが、Firebase コンソールまたは従来の API を介して送信されたメッセージはプロキシされません。この機能は現在ベータ版であり、変更される可能性があります。
デバイスのバッテリーとメモリにメリットがあるため、委任を有効にしたままにすることを強くおすすめしますが、次のいずれかの方法でこの動作をオプトアウトできます。
- アプリレベルで: アプリ マニフェストにディレクティブ
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
を追加します。 - アプリ インスタンス単位: アプリ インスタンスの場合は、特定のユースケースに応じて、アプリの UI フローで
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
を設定します。 - メッセージごとに: 送信リクエストの
AndroidNotification
オブジェクトで、proxy
キーをDENY
に設定します。
Android 向けメッセージの優先度低下の測定
個々のメッセージ。配信時に、配信優先度(getPriority() によって取得)と元の優先度(getOriginalPriority() によって取得)を比較することで、個々のメッセージの優先度が下げられたかどうかを確認できます。
すべてのメッセージ。FCM Aggregate Delivery Data API を使用して、Android 向けのすべてのメッセージのうち優先度が下げられたメッセージの割合を確認できます。メッセージによっては集計データのレポートから除外されるものもありますが、全体的に見れば、メッセージの優先度低下の割合に関する包括的な情報が得られます。配信の集計データに関する記事をご覧になり、詳細情報、および API のクエリを実行するサンプルコードを確認してください。また、API Explorer でクエリを試すこともできます。
プロキシ経由の通知: プロキシ経由の通知は、現在の FCM または GA の配信指標にはカウントされないため、通知配信指標が最大 15% 減少する可能性があります。プロキシされたメッセージのレポートには、FCM Aggregate Delivery Data API を使用します。
ProxyNotificationInsightPercents
は、正常にプロキシされた通知の割合と、正常にプロキシできなかったメッセージの詳細を報告します。
トラブルシューティング
アプリ インスタンスで通知が有効になっているかどうか確認します。ユーザーがアプリの通知権限を無効にしている場合、通知は配信されません。その結果として、メッセージの優先度が下がります。アプリケーション インスタンスに優先度の高いメッセージを送信する前には、通知が有効になっていることを確認してください。
通知を配信する前にサーバーを呼び出さないでください。Android モバイル ユーザーの一部はレイテンシの高いネットワークを利用しているので、通知の表示前にサーバーへの接続を開かないようにしてください。許容処理時間が経過しないうちにサーバーへのコールバックを行うことは、遅延の大きいネットワーク上のユーザーにとってリスクとなる場合があります。代わりに、通知コンテンツを FCM メッセージに含めて、すぐに表示されるようにします。Android で追加のアプリ内コンテンツを同期する必要がある場合は、 WorkManager を使用してタスクのスケジュールを設定し、バックグラウンドでこの処理を行うことができます。