Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

FCM登録トークン管理のベストプラクティス

FCM APIを使用してプログラムで送信リクエストを作成する場合、時間の経過とともに、古い登録トークンを使用して非アクティブなデバイスにメッセージを送信することにより、リソースを浪費していることに気付く場合があります。この状況は、Firebaseコンソールで報告されるメッセージ配信データまたはBigQueryにエクスポートされたデータに影響を及ぼし、配信率の劇的な(ただし実際には有効ではない)低下として現れる可能性があります。このガイドでは、効率的なメッセージターゲティングと有効な配信レポートを確保するために実行できるいくつかの対策について説明します。

基本的なベストプラクティス

FCMAPIを使用してプログラムで送信リクエストを作成するアプリで従う必要のある基本的な方法がいくつかあります。主なベストプラクティスは次のとおりです。

  • サーバーに登録トークンを保存します。サーバーの重要な役割は、各クライアントのトークンを追跡し、アクティブなトークンの更新されたリストを保持することです。コードとサーバーにトークンのタイムスタンプを実装し、このタイムスタンプを定期的に更新することを強くお勧めします。
  • 古くなっ保存されたトークンを削除します。トークンの応答が無効であることが明らかな場合にトークンを削除することに加えて、トークンが古くなっていることを示す他の兆候を監視する必要があります。このガイドでは、これを実現するためのいくつかのオプションについて説明します。

登録トークンを取得して保存する

アプリの最初の起動時に、FCMSDKはクライアントアプリインスタンスの登録トークンを生成します。これは、APIからのターゲット送信リクエストに含めるか、トピックをターゲットにするためにトピックサブスクリプションに追加する必要があるトークンです。

私たちのクライアントのセットアップガイドで述べたように、あなたのアプリケーションは、初回起動時にこのトークンを取得し、タイムスタンプと一緒にあなたのアプリケーションサーバに保存する必要があります。このタイムスタンプは、FCM SDKによって提供されないため、コードとサーバーによって実装する必要があります。

また、トークンをサーバーに保存し、次の場合など、変更されるたびにタイムスタンプを更新することが重要です。

  • アプリは新しいデバイスに復元されます
  • ユーザーがアプリをアンインストール/再インストールします
  • ユーザーはアプリデータをクリアします。

FCMバックエンドからの無効なトークン応答を検出する

FCMからの無効なトークン応答を必ず検出し、無効であることがわかっている登録トークンをシステムから削除して応答してください。 HTTP v1 APIの場合、これらのエラーメッセージは、送信リクエストが古いトークンまたは無効なトークンをターゲットにしていることを示している可能性があります。

  • UNREGISTERED (HTTP 404)
  • INVALID_ARGUMENT (HTTP 400)

参照のerrorCodeの詳細については。

ターゲットトークンに対してこれらの応答のいずれかを受け取った場合、このトークンのレコードは二度と有効にならないため、削除しても安全です。ただし、トークンが実際に無効である場合もありますが、その兆候はないことに注意してください。たとえば、FCMバックエンドは、デバイスが永続的にオフラインになったかどうかを確認できない場合があります。

登録トークンの鮮度の確保

トークンが新しいか古いかを判断するのは必ずしも簡単ではありません。すべてのケースをカバーするには、トークンが古くなっていると見なす場合のしきい値を採用する必要があります。私たちの推奨は2ヶ月です。 2か月より古いトークンは、非アクティブなデバイスである可能性があります。それ以外の場合、アクティブなデバイスはトークンを更新します。

トークンを定期的に更新する

サーバー上のすべての登録トークンを定期的に取得して更新することをお勧めします。これには、次のことが必要です。

  • (例えば、適切なAPI呼び出し使用して現在のトークンを取得するために、あなたのクライアントアプリでアプリのロジックを追加しますtoken(completion):のiOSまたはのためにgetToken()タイムスタンプ付き)、その後、ストレージ用アプリサーバに現在のトークンを送信するAndroid向け)を。これは、すべてのクライアント/トークンをカバーするように構成された毎月のジョブである可能性があります。
  • トークンが変更されたかどうかに関係なく、トークンのタイムスタンプを定期的に更新するサーバーロジックを追加します。

従うタイミングパターンが何であれ、トークンを定期的に更新するようにしてください。月に1回の更新頻度は、バッテリーへの影響と非アクティブな登録トークンの検出のバランスが取れている可能性があります。この更新を行うことにより、非アクティブになったデバイスが再びアクティブになったときに登録を更新することも保証します。毎週より頻繁に更新を行うことに利点はありません。

トピックから古いトークンの購読を解除する

トピックサブスクリプションを管理して古い登録トークンを削除することも、もう1つの考慮事項です。これには2つのステップが含まれます。

  1. アプリは、月に1回、および/または登録トークンが変更されるたびにトピックを再サブスクライブする必要があります。これは自己修復ソリューションを形成し、アプリが再びアクティブになるとサブスクリプションが自動的に再表示されます。
  2. アプリのインスタンスが2ヶ月(または独自の古ウィンドウ)アイドルである場合は、使用して、トピックからそれを解除する必要がありFirebase管理SDKをFCMのバックエンドからトークン/トピックのマッピングを削除します。

これらの2つの手順の利点は、ファンアウトする古いトークンが少ないため、ファンアウトがより速く発生し、古いアプリインスタンスが再びアクティブになると自動的に再サブスクライブすることです。

配信の成功の測定

通常、アクティブに使用されているアプリインスタンスから観察またはキャプチャされたアクションに基づいてメッセージをターゲティングすることをお勧めします。これは、多数のサブスクライバーがいるトピックに定期的にメッセージを送信する場合に特に重要です。これらのサブスクライバーの一部が実際に非アクティブである場合、配信統計への影響は時間の経過とともに大きくなる可能性があります。

メッセージをトークンにターゲティングする前に、次のことを考慮してください。

  • Google Analytics、BigQueryでキャプチャされたデータ、またはその他の追跡信号は、トークンがアクティブであることを示していますか?
  • 以前の配信の試みが一定期間にわたって一貫して失敗しましたか?
  • 過去2か月間に、サーバーの登録トークンが更新されましたか?
  • Androidデバイスの場合は、んFCMデータAPIは、原因へのメッセージ配信の失敗の割合が高い報告droppedDeviceInactive

配信の詳細については、概要メッセージ配信を