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 を使用してタスクのスケジュールを設定し、バックグラウンドでこの処理を行うことができます。