firebase-messaging 25.1.xで導入されたFirebaseの機能で、レガシーFCM登録トークンをFirebase Installation IDに置き換えます。
この機能は、firebase_messaging_installation_id_enabledという名前のマニフェスト設定で制御されます。これはFirebaseの設定であり、OneSignalの設定ではありません。 OneSignalはプッシュの登録方法を決定するためにこの設定を読み取りますが、定義はしておらず、変更することも、OneSignalだけに適用することもできません。
有効にすべきですか? \
FID登録は任意ですが、推奨されています。Googleは、Firebase Installation IDを推奨してFCM登録トークンを非推奨にしたため、いずれすべてのアプリが移行する必要があります。切り替えても既存のユーザーは購読を維持してメッセージを受信し続け、OneSignalは引き続きFCM Service Account経由で送信します。各デバイスは、次回の起動時にレガシーFCM登録トークンを新しいプッシュトークン値(FID)に置き換えます。有効にする前に \
FID登録を有効にする前に、次の点を確認してください:- 古いデバイス。 FID登録にはGoogle Play開発者サービス
261200000以降が必要です。すでに購読済みのデバイスは現在のプッシュトークンを保持します。古いAndroidデバイスや、Google Play開発者サービスの更新を受け取らないデバイスへの新規インストールは、Google Play開発者サービスが更新されるまでプッシュを受信できません。これらはnotification_typeステータス-34を示します。 - 他のプッシュSDK。 この設定はアプリ全体に適用され、すべてのSDKで
getToken()とdeleteToken()を無効にします。主に影響を受けるのは、プッシュ通知を送信する他のSDKです。それぞれがFirebase Installation IDをサポートしていることを確認してください。 - プッシュトークンの形式。
OneSignal.User.pushSubscription.tokenとIPushSubscriptionObserverは、FCM登録トークンではなくFirebase Installation IDを返します。プロパティの型は変わらないため、コンパイル時に失敗することはありません。その値をFCMトークンとして保存、検証、送信するコードは、エラーなしで動作しなくなります。 - カスタムFirebase統合。 アプリに独自の
FirebaseMessagingServiceがある場合、FirebaseはonNewToken()の代わりにonRegistered()を呼び出します。トークン処理をonRegistered()に移動してください。アプリが(ログアウト時などに)deleteToken()を呼び出す場合は、unregister()に切り替えてください。OneSignalにはどちらのコールバックも必要ありません。FirebaseのFirebase Installation IDによる登録ガイドと、OneSignalと併用する場合はFirebase Messaging SDKの競合を参照してください。 - ビルド要件。 アプリは
firebase-messaging25.1.2以降を宣言し、minSdk23以上を使用する必要があります。firebase-messaging26.xでは、minSdk24以上とKotlin 2.0.0以降が必要です。要件を参照してください。 - ロールバックには新しいリリースが必要。 この設定はアプリのビルドの一部です。有効化または無効化には、新しいアプリのビルドとストアリリースが必要です。サーバー側の切り替えはありません。
アプリで有効になっていますか? \
独自のAndroidManifest.xmlだけでなく、マージされたマニフェストを確認してください。依存関係がこの設定を追加しても、ソースには表示されないことがあります。
1
マージされたマニフェストをビルドする
2
マージされた出力を検索する
android:valueを確認してください。FID登録が有効になるのは、その値がブール値のtrueの場合のみです。meta-dataエントリがない場合、またはマージされた値がfalseの場合は、レガシートークンパスを使用しています。依存関係がtrueに設定している場合に値を強制的にfalseにするには、FID登録を無効にするを参照してください。FirebaseAppが見つかったかどうか、register()が利用可能かどうかが含まれます。登録が成功した場合はこれら3つはログに記録されないため、正常なデバイスでは詳細ログに表示されません。設定の確認にはマージされたマニフェストを使用してください。
この設定を有効にする既知のSDK。 Braze Android SDK 43.0.0以降は、マニフェストのマージによって
firebase_messaging_installation_id_enabled="true"を追加します。アプリにBraze 43以降が含まれている場合、自分で設定を追加したかどうかにかかわらず、FID登録は有効になります。FID登録を有効にする \
FID登録を有効にするには、アプリに独自のFirebase構成を追加し、firebase-messaging 25.1.2以降を必須にして、マニフェスト設定を有効にします。その後、デバイスがFirebase Installation IDで登録されることを確認します。
要件 \
FID登録には、以下のすべてが必要です。いずれかが欠けている場合、登録はトラブルシューティングのいずれかのステータスで失敗します。- OneSignal Android SDK
5.11.0以降、またはそれを含むラッパーSDKバージョン。OneSignal SDKの最小バージョンを参照してください - アプリで宣言された**
com.google.firebase:firebase-messaging**25.1.2以降。それより前の25.1.xバージョンには、バックアップの復元後やアプリデータの複製時の失敗など、登録のバグがあります - Android API 23以上(
firebase-messaging25.0.0で最小値が21から23に引き上げられました)。firebase-messaging26.xでは、API 24以上とKotlin 2.0.0以降。firebase-messaging 26.xの使用を参照してください - デバイス上のGoogle Play開発者サービスバージョン
261200000以降 - 独自のFirebaseプロジェクトのデフォルト
FirebaseApp。 ステップ1:google-services.jsonをアプリに追加するを参照してください - 一致するFirebaseプロジェクト。
google-services.jsonのプロジェクトは、OneSignalにアップロードしたFCM Service Accountと同じプロジェクトである必要があります。Firebaseプロジェクトを一致させるを参照してください
OneSignal SDKの最小バージョン \
FID登録のサポートは、OneSignal Android SDK5.11.0で提供されました。以下の各ラッパーSDKのバージョンは、それを含む最初のバージョンです。古いバージョンはレガシートークンパスのみを使用するため、設定が有効な場合、それらのバージョンではプッシュ登録が失敗します。
ステップ1:google-services.jsonをアプリに追加する \
FID登録には、クライアント側でFirebaseプロジェクトの詳細が必要です。OneSignalにアップロードしたFCM Service Accountと同じFirebaseプロジェクトからgoogle-services.jsonをダウンロードします。プロジェクトが一致しない場合、登録は-6で失敗します。ファイルをアプリに追加し、Google Services Gradleプラグインを適用します。ファイルの配置場所はアプリによって異なります。手順についてはFirebase構成ファイルを追加するを参照してください。すでに追加済みの場合もあります。
ステップ2:firebase-messaging 25.1.2以降を宣言する \
OneSignalはfirebase-messaging 24.xに対してコンパイルされており、レガシーFCM登録トークンにはFirebaseMessaging.getToken()を使用します。
FID登録はFirebaseMessaging.register()を使用し、これにはfirebase-messaging 25.1.2以降が必要です。
firebase-messagingをアップグレードするには、アプリモジュールのGradleファイルに次を追加します:
firebase-messaging 26.xの使用 \
[25.1.2, 25.99.99]の範囲指定により、アプリは追加要件のない25.xに維持されます。アプリまたは別の依存関係がfirebase-messaging 26.xを取り込む場合、Gradleは26.xに解決し、アプリには次も必要になります:
minSdk24以上- Kotlin 2.0.0以降
ステップ3:Firebaseのマニフェスト設定を追加する \
AndroidManifest.xmlの<application>タグ内に次を追加します:
AndroidManifest.xml
onesignal-expo-pluginの構成(バージョン2.8.0以降)でenableFirebaseInstallationId: trueを設定し、expo prebuildを実行します。
ステップ4:FID登録を確認する \
デバイスでビルドして実行し、ログまたはDashboard > Audience > SubscriptionsでPush Tokenを確認します。OneSignalのSubscriptionがSubscribedになり、プッシュトークンが
cXp9fY-TRFCLSy9kVTqorZのような短いFirebase Installation IDになっている必要があります。dN8Ya5MTR2OO-0BXdqimCI:APA91bFw...のようなコロンを含む長いレガシーFCMトークンではありません。ステータスが負の値の場合は、トラブルシューティングを参照してください。FID登録を無効にする \
必要な方法は、設定がどこから来ているかによって異なります。- 自分で追加した場合
- 依存関係が追加した場合
AndroidManifest.xmlから<meta-data>要素を削除してから、再ビルドします。トラブルシューティング \
Dashboard > Audience > SubscriptionsでSubscriptionを探し、ステータスを確認します。以下の各ステータスには、1つの原因と1つの解決策があります。 構成を修正して新しいビルドをリリースすると、同じSubscriptionが後のセッションで回復します。再インストールは不要で、新しいSubscriptionは作成されません。-32:デフォルトのFirebaseアプリがない \
FID登録には、アプリ独自のデフォルトFirebaseAppが必要です。OneSignalの共有FirebaseプロジェクトではインストールIDを生成できません。
主な原因(多い順):
google-services.jsonがない。 FirebaseコンソールのProject settings > Your appsからダウンロードし、アプリに追加します。ネイティブAndroidアプリはapp/ディレクトリを使用します。その他のプラットフォームは異なるパスを使用します。Firebase構成ファイルを追加するを参照してください。- Google Services Gradleプラグインが適用されていない。 ファイルだけでは何の効果もありません。プラグインがファイルを、Firebaseが実行時に読み取るリソースに変換します。Firebase構成ファイルを追加するを参照してください。
- プラグインが誤ったGradleファイルで適用されている。
applyは、プロジェクトレベルのファイルではなく、アプリモジュールのbuild.gradleに記述する必要があります。 - プログラムによる初期化が遅すぎた、または実行されなかった。 (ユーザーの同意の後にFirebaseを読み込む場合など)デフォルトアプリを自分で初期化する場合は、OneSignalが初期化される前に完了している必要があります。google-services.jsonなしでFirebaseをセットアップするを参照してください。
-33:register APIが利用できない \
アプリが解決したfirebase-messagingのバージョンにFirebaseMessaging.register() APIが存在しないか、リリースビルドから削除されています。
-
firebase-messaging25.1.2以降を宣言します。register()は25.1.0で初めて登場し、OneSignalは24.xに対してコンパイルされているため、新しいライブラリはアプリ側で取り込む必要があります。25.1.0や25.1.1ではなく、25.1.2以降を使用してください。要件を参照してください。 -
解決されたバージョンを確認します。 別の依存関係が古いバージョンを固定している可能性があります:
- リリースビルドでのみ発生する場合は、 R8がメソッドを削除または名前変更しています。OneSignalのコンシューマーProGuardルールが適用されていること、およびそれらを無効にしていないことを確認してください。
-34:FID登録が失敗した \
このステータスは再試行可能です。SDKは後のセッションで再試行します。- Google Play開発者サービスが古い。 FID登録にはバージョン
261200000以降が必要です。それより前のバージョンでは、FirebaseはインストールIDを登録する代わりにレガシートークンを要求しますが、そのトークンがアプリで利用可能になることはありません。SDKは、プッシュを受信できないSubscriptionを報告する代わりに失敗します。Playストアからデバイス上のGoogle Play開発者サービスを更新してください。 - 一時的なFirebaseの障害。 対応は不要です。登録は後のアプリ起動時に回復します。
-6:Sender IDの不一致 \
ダッシュボードにはInvalid Google Project Numberと表示されます。アプリのFirebaseプロジェクトと、OneSignalにアップロードしたFCM Service Accountが同じプロジェクトではありません。
プロジェクトの不一致によってこのステータスになるのは、FID登録が有効な場合のみです。レガシートークンパスでは、同じ不一致でも失敗せず、SDKは代わりにOneSignalの共有Firebaseプロジェクト経由で登録します。そのため、以前はプッシュが機能していたにもかかわらず、FID登録を有効にした直後に-6が表示されることがあります。
Firebaseプロジェクトを一致させるで2つのプロジェクトを比較します。値が異なる場合は、正しいFirebaseプロジェクトのService Accountをアップロードするか、アップロードしたService Accountのプロジェクトのgoogle-services.jsonを同梱してください。
FAQ
FIDを使用しない場合でもgoogle-services.jsonは必要ですか? \
現時点ではファイルがなくてもプッシュは機能しますが、追加することをお勧めします。ファイルを追加しても、マニフェスト設定は有効になりません。google-services.jsonを省略するとどうなりますか?を参照してください。
既存のSubscriptionは失われますか? \
いいえ。デバイスは次回のアプリ起動時に再登録され、新しいプッシュトークン値で同じSubscriptionを維持します。これは有効化と無効化のどちらの方向にも当てはまります。例外はFirebaseプロジェクトの不一致で、修正をリリースするまで既存のSubscriptionは無効としてマークされます。-6を参照してください。
OneSignalだけでFID登録を有効にできますか? \
いいえ。この設定はプロセス全体に適用され、すべてのSDKでgetToken()を無効にします。インストールIDによる登録は、デフォルトのFirebaseAppのみを使用できます。OneSignalの共有アプリではそのIDを生成できません。
プッシュトークンの形式が変わったのはなぜですか? \
アプリがFirebase Installation IDで登録するようになったためです。Installation IDはcXp9fY-TRFCLSy9kVTqorZのように短く、コロンを含みません。レガシーFCMトークンはdN8Ya5MTR2OO-0BXdqimCI:APA91bFw...のように長く、コロンを含みます。
関連ページ
Android Firebase 認証情報
FCM Service Account秘密鍵をアップロードし、
google-services.jsonをアプリに追加します。Android SDKセットアップ
OneSignal Android SDKをインストールして初期化します。
Subscriptions
-6やFIDステータス-32~-34を含むSubscriptionステータスを確認します。デバッグログの取得
詳細なSDKログを収集して登録エラーを確認します。