Android では、ダウンストリーム メッセージに配信の優先度を割り当てるオプションとして、標準(normal)と高(high)の 2 つの優先度があります。標準の優先度と高い優先度のメッセージの配信は、次のように行われます。
優先度: 標準。データ メッセージのデフォルトの優先度です。デバイスがスリープしていない場合、優先度が標準のメッセージはすぐに配信されます。デバイスが Doze モードの場合は、バッテリーを節約するために Doze モードが終了するまで配信が延期されることがあります。新着メールの通知、UI の同期の維持の通知、バックグラウンドでのアプリデータの同期の通知など、緊急度の低いメッセージでは、標準の配信優先度を選択します。
バックグラウンドでのデータ同期をアプリにリクエストする標準優先度のメッセージを Android で受け取る場合は、WorkManager を使用してタスクのスケジュールを設定し、ネットワークが利用可能になったときにその処理を行えます。
優先度: 高。優先度の高いメッセージは、FCM によって即時配信が試みられます。その際に FCM は、スリープ状態のデバイスを必要に応じてアクティブにしたり、限られた処理(ごく限定的なネットワーク アクセスなど)を行ったりすることが可能です。通常、優先度の高いメッセージが配信されると、ユーザーによるアプリの操作やその通知の操作が行われることになります。
Android における優先度の高いメッセージの使用
Android において優先度の高いメッセージは、なるべく早くユーザーに確認してもらう必要のあるコンテンツ向けであり、ユーザーに対する通知の表示が行われます。ユーザーに対する通知の表示を行うべきでないメッセージのパターンが FCM によって検出された場合、そのメッセージの優先度は通常の優先度に下げられることがあります。FCM がメッセージの優先度を下げるかどうかを判断する際には、過去 7 日間のメッセージの動作が使用されます。この決定はアプリケーションのインスタンスごとに独立して行われます。優先度の高いメッセージに対応して、ユーザーに対する通知の表示が行われた場合、その後の優先度の高いメッセージの優先度が下げられることはありません。このことは、FCM SDK を使用した通知メッセージの通知、デベロッパーが生成したデータ メッセージの通知のいずれにも適用されます。
Android 向けメッセージの優先度低下の測定
個々のメッセージ。配信時に、配信優先度(getPriority() によって取得)と元の優先度(getOriginalPriority() によって取得)を比較することで、個々のメッセージの優先度が下げられたかどうかを確認できます。
すべてのメッセージ。FCM Aggregate Delivery Data API を使用して、Android 向けのすべてのメッセージのうち優先度が下げられたメッセージの割合を確認できます。メッセージによっては集計データのレポートから除外されるものもありますが、全体的に見れば、メッセージの優先度低下の割合に関する包括的な情報が得られます。配信の集計データに関する記事をご覧になり、詳細情報、および API のクエリを実行するサンプルコードを確認してください。また、API Explorer でクエリを試すこともできます。
トラブルシューティング
アプリ インスタンスで通知が有効になっているかどうか確認します。ユーザーがアプリの通知権限を無効にしている場合、通知は配信されません。その結果として、メッセージの優先度が下がります。アプリケーション インスタンスに優先度の高いメッセージを送信する前には、通知が有効になっていることを確認してください。
通知を配信する前にサーバーを呼び出さないでください。Android モバイル ユーザーの一部はレイテンシの高いネットワークを利用しているので、通知の表示前にサーバーへの接続を開かないようにしてください。許容処理時間が経過しないうちにサーバーへのコールバックを行うことは、遅延の大きいネットワーク上のユーザーにとってリスクとなる場合があります。代わりに、通知コンテンツを FCM メッセージに含めて、すぐに表示されるようにします。Android で追加のアプリ内コンテンツを同期する必要がある場合は、WorkManager を使用してタスクのスケジュールを設定し、バックグラウンドでこの処理を行うことができます。