> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Firebase Installation ID登録

> AndroidでのFirebase Installation ID（FID）登録の仕組み、アプリで有効になっているかの確認方法、OneSignalの要件について説明します。

Firebase Installation ID（FID）登録は、`firebase-messaging` 25.1.xで導入された**Firebase**の機能で、レガシーFCM登録トークンをFirebase Installation IDに置き換えます。

この機能は、`firebase_messaging_installation_id_enabled`という名前のマニフェスト設定で制御されます。**これはFirebaseの設定であり、OneSignalの設定ではありません。** OneSignalはプッシュの登録方法を決定するためにこの設定を読み取りますが、定義はしておらず、変更することも、OneSignalだけに適用することもできません。

> [!WARNING]
>
> `firebase_messaging_installation_id_enabled`は**アプリ全体**に適用されます。`true`の場合、Firebaseはプロセス内のすべてのSDK（OneSignal、他のベンダーSDK、独自のFirebaseコード）で`getToken()`を無効にします。
>
> Androidは依存関係のマニフェストをマージするため、**別のSDKがこの設定を有効にする場合があります。** 自分で選択していなくても、このパスを使用している可能性があります。

***

## 有効にすべきですか？ \\

FID登録は任意ですが、**推奨**されています。Googleは、Firebase Installation IDを推奨して[FCM登録トークンを非推奨](https://firebase.google.com/docs/cloud-messaging/android/client#access-fcm-registration-token)にしたため、いずれすべてのアプリが移行する必要があります。切り替えても既存のユーザーは購読を維持してメッセージを受信し続け、OneSignalは引き続きFCM Service Account経由で送信します。各デバイスは、次回の起動時にレガシーFCM登録トークンを新しいプッシュトークン値（FID）に置き換えます。

### 有効にする前に \\

FID登録を有効にする前に、次の点を確認してください：

* **古いデバイス。** FID登録にはGoogle Play開発者サービス`261200000`以降が必要です。すでに購読済みのデバイスは現在のプッシュトークンを保持します。古いAndroidデバイスや、Google Play開発者サービスの更新を受け取らないデバイスへの新規インストールは、Google Play開発者サービスが更新されるまでプッシュを受信できません。これらはnotification\_typeステータス[`-34`](#34-fid-registration-failed)を示します。
* **他のプッシュ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による登録](https://firebase.google.com/docs/cloud-messaging/android/client#enable-registration-via-firebase-installation-id)ガイドと、OneSignalと併用する場合は[Firebase Messaging SDKの競合](https://documentation.onesignal.com/docs/ja/notifications-show-successful-but-are-not-being-shown.md#firebase-messaging-sdk-conflict)を参照してください。
* **ビルド要件。** アプリは`firebase-messaging` 25.1.2以降を宣言し、`minSdk` 23以上を使用する必要があります。`firebase-messaging` 26.xでは、`minSdk` 24以上とKotlin 2.0.0以降が必要です。[要件](#requirements)を参照してください。
* **ロールバックには新しいリリースが必要。** この設定はアプリのビルドの一部です。有効化または無効化には、新しいアプリのビルドとストアリリースが必要です。サーバー側の切り替えはありません。

***

## アプリで有効になっていますか？ \\

独自の`AndroidManifest.xml`だけでなく、**マージされた**マニフェストを確認してください。依存関係がこの設定を追加しても、ソースには表示されないことがあります。

**1. マージされたマニフェストをビルドする**

```bash theme={null}
./gradlew :app:processDebugManifest
```

**2. マージされた出力を検索する**

```bash theme={null}
grep -r "firebase_messaging_installation_id_enabled" app/build/intermediates/ --include=AndroidManifest.xml
```

grepでヒットしただけでは不十分です。マージされた`android:value`を確認してください。FID登録が有効になるのは、その値がブール値の`true`の場合のみです。

`meta-data`エントリがない場合、またはマージされた値が`false`の場合は、レガシートークンパスを使用しています。依存関係が`true`に設定している場合に値を強制的に`false`にするには、[FID登録を無効にする](#disable-fid-registration)を参照してください。

登録が失敗した場合、エラーにはマニフェストの値、デフォルトの`FirebaseApp`が見つかったかどうか、`register()`が利用可能かどうかが含まれます。登録が成功した場合はこれら3つはログに記録されないため、正常なデバイスでは[詳細ログ](https://documentation.onesignal.com/docs/ja/capturing-a-debug-log.md)に表示されません。設定の確認にはマージされたマニフェストを使用してください。

> [!NOTE]
>
> **この設定を有効にする既知の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登録には、以下のすべてが必要です。いずれかが欠けている場合、登録は[トラブルシューティング](#troubleshooting)のいずれかのステータスで失敗します。

* **OneSignal Android SDK** `5.11.0`以降、またはそれを含むラッパーSDKバージョン。[OneSignal SDKの最小バージョン](#minimum-onesignal-sdk-versions)を参照してください
* アプリで宣言された\*\*`com.google.firebase:firebase-messaging`\*\* `25.1.2`以降。それより前の25.1.xバージョンには、バックアップの復元後やアプリデータの複製時の失敗など、登録のバグがあります
* **Android API 23以上**（`firebase-messaging` 25.0.0で最小値が21から23に引き上げられました）。`firebase-messaging` 26.xでは、API 24以上とKotlin 2.0.0以降。[firebase-messaging 26.xの使用](#using-firebase-messaging-26-x)を参照してください
* デバイス上の**Google Play開発者サービス**バージョン`261200000`以降
* **独自のFirebaseプロジェクトのデフォルト`FirebaseApp`。** [ステップ1：google-services.jsonをアプリに追加する](#step-1-add-google-services-json-to-your-app)を参照してください
* **一致するFirebaseプロジェクト。** `google-services.json`のプロジェクトは、OneSignalにアップロードしたFCM Service Accountと同じプロジェクトである必要があります。[Firebaseプロジェクトを一致させる](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md#match-your-firebase-projects)を参照してください

#### OneSignal SDKの最小バージョン \\

FID登録のサポートは、OneSignal Android SDK `5.11.0`で提供されました。以下の各ラッパーSDKのバージョンは、それを含む最初のバージョンです。古いバージョンはレガシートークンパスのみを使用するため、設定が有効な場合、それらのバージョンではプッシュ登録が失敗します。

| SDK | 最小バージョン | 備考 |
| - | - | - |
| Android（ネイティブ） | `5.11.0` | |
| Flutter | `5.7.2` | |
| React Native | `5.5.16` | |
| Expo | `react-native-onesignal` `5.5.16` | `onesignal-expo-plugin` `2.8.0`で`enableFirebaseInstallationId`プロパティが追加され、マニフェスト設定を自動的に書き込みます。開発ビルドが必要です。Expo Goはサポートされていません |
| Cordova | `5.6.2` | |
| Capacitor | `1.2.2` | |
| Unity | `5.4.2` | |
| .NET / MAUI | `6.4.2` | |

### ステップ1：google-services.jsonをアプリに追加する \\

FID登録には、クライアント側でFirebaseプロジェクトの詳細が必要です。OneSignalにアップロードしたFCM Service Accountと同じFirebaseプロジェクトから`google-services.json`をダウンロードします。プロジェクトが一致しない場合、登録は[`-6`](#6-sender-id-mismatch)で失敗します。ファイルをアプリに追加し、Google Services Gradleプラグインを適用します。ファイルの配置場所はアプリによって異なります。手順については[Firebase構成ファイルを追加する](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md#add-your-firebase-configuration-file)を参照してください。すでに追加済みの場合もあります。

### ステップ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ファイルに次を追加します：

```kotlin app/build.gradle.kts theme={null}
implementation("com.google.firebase:firebase-messaging:[25.1.2, 25.99.99]")
```

```groovy app/build.gradle theme={null}
implementation 'com.google.firebase:firebase-messaging:[25.1.2, 25.99.99]'
```

#### firebase-messaging 26.xの使用 \\

`[25.1.2, 25.99.99]`の範囲指定により、アプリは追加要件のない25.xに維持されます。アプリまたは別の依存関係が`firebase-messaging` 26.xを取り込む場合、Gradleは26.xに解決し、アプリには次も必要になります：

* `minSdk` 24以上
* Kotlin 2.0.0以降

アプリが解決するバージョンを確認します：

```bash theme={null}
./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep firebase-messaging
```

### ステップ3：Firebaseのマニフェスト設定を追加する \\

`AndroidManifest.xml`の`<application>`タグ内に次を追加します：

```xml AndroidManifest.xml theme={null}
<meta-data
    android:name="firebase_messaging_installation_id_enabled"
    android:value="true" />
```

Expoでは、代わりに`onesignal-expo-plugin`の構成（バージョン`2.8.0`以降）で`enableFirebaseInstallationId: true`を設定し、`expo prebuild`を実行します。

### ステップ4：FID登録を確認する \\

デバイスでビルドして実行し、ログまたは**Dashboard > Audience > Subscriptions**で**Push Token**を確認します。

> [!TIP]
>
> OneSignalのSubscriptionが**Subscribed**になり、プッシュトークンが`cXp9fY-TRFCLSy9kVTqorZ`のような短いFirebase Installation IDになっている必要があります。`dN8Ya5MTR2OO-0BXdqimCI:APA91bFw...`のようなコロンを含む長いレガシーFCMトークンではありません。ステータスが負の値の場合は、[トラブルシューティング](#troubleshooting)を参照してください。

***

## FID登録を無効にする \\

必要な方法は、設定がどこから来ているかによって異なります。

> [tab] 自分で追加した場合
>
> `AndroidManifest.xml`から`<meta-data>`要素を削除してから、再ビルドします。

> [tab] 依存関係が追加した場合
>
> 設定がマニフェストのマージによって追加されている場合、独自のエントリは存在しないため、それを削除しても効果はありません。代わりに、マージされた値を上書きします。`tools:replace`を指定した`false`の値はマージで優先されるため、依存関係からの`true`は有効になりません：
>
> ```xml AndroidManifest.xml theme={null}
> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
>     xmlns:tools="http://schemas.android.com/tools">
>
>     <application>
>         <meta-data
>             android:name="firebase_messaging_installation_id_enabled"
>             android:value="false"
>             tools:replace="android:value" />
>     </application>
> </manifest>
> ```
>
> 再ビルドし、マージされたマニフェストを再確認して、値が`false`になったことを確認します。

> [!WARNING]
>
> FID登録を無効にすると、OneSignalだけでなく、アプリ内のすべてのSDKに影響します。別のSDKがFID登録に依存している場合は、設定を無効にする前にそのドキュメントを確認してください。

デバイスは次回のアプリ起動時に再登録されます。既存のSubscriptionは保持され、新しいトークン値を受け取ります。

***

## トラブルシューティング \\

**Dashboard > Audience > Subscriptions**でSubscriptionを探し、ステータスを確認します。以下の各ステータスには、1つの原因と1つの解決策があります。

構成を修正して新しいビルドをリリースすると、**同じSubscriptionが後のセッションで回復します**。再インストールは不要で、新しいSubscriptionは作成されません。

| ステータス | 意味 | 解決策 |
| - | - | - |
| `-32` | FID登録は有効だが、アプリにデフォルトの`FirebaseApp`がない | [Firebase構成を追加する](#32-no-default-firebase-app) |
| `-33` | FID登録は有効だが、`FirebaseMessaging.register()`が利用できない | [firebase-messagingをアップグレードする](#33-register-api-unavailable) |
| `-34` | FID登録が失敗した、またはGoogle Play開発者サービスが古い | [Google Play開発者サービスを更新する](#34-fid-registration-failed) |
| `-6` | アプリとOneSignalの間でSender IDが一致しない | [Firebaseプロジェクトを一致させる](#6-sender-id-mismatch) |

### -32：デフォルトのFirebaseアプリがない \\

FID登録には、アプリ独自のデフォルト`FirebaseApp`が必要です。OneSignalの共有FirebaseプロジェクトではインストールIDを生成できません。

主な原因（多い順）：

1. **`google-services.json`がない。** [Firebaseコンソール](https://console.firebase.google.com/)の**Project settings > Your apps**からダウンロードし、アプリに追加します。ネイティブAndroidアプリは`app/`ディレクトリを使用します。その他のプラットフォームは異なるパスを使用します。[Firebase構成ファイルを追加する](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md#add-your-firebase-configuration-file)を参照してください。
2. **Google Services Gradleプラグインが適用されていない。** ファイルだけでは何の効果もありません。プラグインがファイルを、Firebaseが実行時に読み取るリソースに変換します。[Firebase構成ファイルを追加する](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md#add-your-firebase-configuration-file)を参照してください。
3. **プラグインが誤ったGradleファイルで適用されている。** `apply`は、プロジェクトレベルのファイルではなく、**アプリモジュールの**`build.gradle`に記述する必要があります。
4. **プログラムによる初期化が遅すぎた、または実行されなかった。** （ユーザーの同意の後にFirebaseを読み込む場合など）デフォルトアプリを自分で初期化する場合は、OneSignalが初期化される前に完了している必要があります。[google-services.jsonなしでFirebaseをセットアップする](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md#set-up-firebase-without-google-services-json)を参照してください。

FID登録を使用するつもりがなかった場合は、代わりに[無効にしてください](#disable-fid-registration)。

### -33：register APIが利用できない \\

アプリが解決した`firebase-messaging`のバージョンに`FirebaseMessaging.register()` APIが存在しないか、リリースビルドから削除されています。

1. **`firebase-messaging` 25.1.2以降を宣言します。** `register()`は25.1.0で初めて登場し、OneSignalは24.xに対してコンパイルされているため、新しいライブラリはアプリ側で取り込む必要があります。25.1.0や25.1.1ではなく、25.1.2以降を使用してください。[要件](#requirements)を参照してください。

2. **解決されたバージョンを確認します。** 別の依存関係が古いバージョンを固定している可能性があります：

   ```bash theme={null}
   ./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep firebase-messaging
   ```

3. **リリースビルドでのみ発生する場合は、** R8がメソッドを削除または名前変更しています。OneSignalのコンシューマーProGuardルールが適用されていること、およびそれらを無効にしていないことを確認してください。

### -34：FID登録が失敗した \\

このステータスは再試行可能です。SDKは後のセッションで再試行します。

1. **Google Play開発者サービスが古い。** FID登録にはバージョン`261200000`以降が必要です。それより前のバージョンでは、FirebaseはインストールIDを登録する代わりにレガシートークンを要求しますが、そのトークンがアプリで利用可能になることはありません。SDKは、プッシュを受信できないSubscriptionを報告する代わりに失敗します。Playストアからデバイス上のGoogle Play開発者サービスを更新してください。
2. **一時的なFirebaseの障害。** 対応は不要です。登録は後のアプリ起動時に回復します。

### -6：Sender IDの不一致 \\

ダッシュボードには`Invalid Google Project Number`と表示されます。アプリのFirebaseプロジェクトと、OneSignalにアップロードしたFCM Service Accountが同じプロジェクトではありません。

プロジェクトの不一致によってこのステータスになるのは、FID登録が有効な場合のみです。レガシートークンパスでは、同じ不一致でも失敗せず、SDKは代わりにOneSignalの共有Firebaseプロジェクト経由で登録します。そのため、以前はプッシュが機能していたにもかかわらず、FID登録を有効にした直後に`-6`が表示されることがあります。

[Firebaseプロジェクトを一致させる](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md#match-your-firebase-projects)で2つのプロジェクトを比較します。値が異なる場合は、正しいFirebaseプロジェクトのService Accountをアップロードするか、アップロードしたService Accountのプロジェクトの`google-services.json`を同梱してください。

> [!WARNING]
>
> 他のステータスとは異なり、`-6`は既存のSubscriptionを無効としてマークします。構成を修正して更新されたビルドをリリースすると、デバイスは次回の起動時に再登録され、**Subscribed**に戻ります。

***

## FAQ

### FIDを使用しない場合でも`google-services.json`は必要ですか？ \\

現時点ではファイルがなくてもプッシュは機能しますが、追加することをお勧めします。ファイルを追加しても、マニフェスト設定は有効になりません。[google-services.jsonを省略するとどうなりますか？](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md#what-happens-if-i-skip-google-services-json)を参照してください。

### 既存のSubscriptionは失われますか？ \\

いいえ。デバイスは次回のアプリ起動時に再登録され、新しいプッシュトークン値で同じSubscriptionを維持します。これは有効化と無効化のどちらの方向にも当てはまります。例外はFirebaseプロジェクトの不一致で、修正をリリースするまで既存のSubscriptionは無効としてマークされます。[`-6`](#6-sender-id-mismatch)を参照してください。

### OneSignalだけでFID登録を有効にできますか？ \\

いいえ。この設定はプロセス全体に適用され、すべてのSDKで`getToken()`を無効にします。インストールIDによる登録は、デフォルトの`FirebaseApp`のみを使用できます。OneSignalの共有アプリではそのIDを生成できません。

### プッシュトークンの形式が変わったのはなぜですか？ \\

アプリがFirebase Installation IDで登録するようになったためです。Installation IDは`cXp9fY-TRFCLSy9kVTqorZ`のように短く、コロンを含みません。レガシーFCMトークンは`dN8Ya5MTR2OO-0BXdqimCI:APA91bFw...`のように長く、コロンを含みます。

***

## 関連ページ

> [card] [Android Firebase 認証情報](https://documentation.onesignal.com/docs/ja/android-firebase-credentials.md)
>
> FCM Service Account秘密鍵をアップロードし、`google-services.json`をアプリに追加します。

> [card] [Android SDKセットアップ](https://documentation.onesignal.com/docs/ja/android-sdk-setup.md)
>
> OneSignal Android SDKをインストールして初期化します。

> [card] [Subscriptions](https://documentation.onesignal.com/docs/ja/subscriptions.md)
>
> `-6`やFIDステータス`-32`～`-34`を含むSubscriptionステータスを確認します。

> [card] [デバッグログの取得](https://documentation.onesignal.com/docs/ja/capturing-a-debug-log.md)
>
> 詳細なSDKログを収集して登録エラーを確認します。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.