> This page is part of the [Customer.io documentation](https://docs.customer.io). For the complete index, see [llms.txt](https://docs.customer.io/llms.txt).
> Last updated: October 23, 2026
> To take actions in Customer.io from an agent, use the [Customer.io CLI](https://docs.customer.io/ai/cli/get-started.md) or the [MCP server](https://docs.customer.io/ai/mcp/get-started.md).

# Migrate to Firebase Installation IDs

If you send push notifications through FCM, register Firebase Installation IDs (FIDs) with Customer.io instead of FCM registration tokens. FID mode is optional, and your existing token-based integration keeps working until you choose to migrate.

If you send push notifications through FCM, Firebase can register devices with [Firebase Installation IDs (FIDs) ↗](https://firebase.google.com/docs/cloud-messaging/manage-tokens) instead of FCM registration tokens. Starting in version 6.14.0, the Customer.io React Native SDK registers the FID on each platform where your app turns on FID registration. Until you do, the SDK keeps registering FCM tokens.

When someone opens a version of your app with FID registration turned on, the SDK replaces the device’s FCM token with the FID on their profile. You don’t need to change anything in Customer.io. To learn how FIDs differ from FCM tokens and how Customer.io sends to each, see [Device IDs](https://docs.customer.io/messaging/channels/push/developer-guide/#device-ids).

## Turn on FID mode

1.  Update `customerio-reactnative` to 6.14.0 or later. Use `firebase-messaging` 25.1.2 or later on Android and `FirebaseMessaging` 12.19.0 or later on iOS. If another library, like React Native Firebase, pins an older Firebase version, update that library too. On iOS, React Native Firebase 27 uses Firebase iOS 13, which `CioFirebaseWrapper` doesn’t support.
2.  Turn on FID registration in your native projects. See Firebase’s [Android ↗](https://firebase.google.com/docs/cloud-messaging/android/client) and [Apple ↗](https://firebase.google.com/docs/cloud-messaging/ios/client) setup guides for details.
    *   **Android:** in `android/app/src/main/AndroidManifest.xml`, inside `<application>`:

        ```
        <meta-data
            android:name="firebase_messaging_installation_id_enabled"
            android:value="true" />
        ```

    *   **iOS:** in `ios/<YourApp>/Info.plist`:

        ```
        <key>FirebaseMessagingInstallationIdEnabled</key>
        <true/>
        ```

3.  If your app forwards Firebase’s registration callbacks to Customer.io in native code, forward the FID callback instead of the token callback. Firebase calls only the FID callback in FID mode.
    *   **Android:** forward `onRegistered` instead of `onNewToken`.

        ```
        override fun onRegistered(installationId: String) {
            CustomerIOFirebaseMessagingService.onRegistered(this, installationId)
        }
        ```

    *   **iOS:** forward `messaging(_:didReceiveRegistration:)` instead of `messaging(_:didReceiveRegistrationToken:)`.

        ```
        func messaging(_ messaging: Messaging, didReceiveRegistration installationId: String?) {
            MessagingPush.shared.messaging(messaging, didReceiveRegistration: installationId)
        }
        ```

4.  If your app calls `CustomerIO.registerDeviceToken()`, pass the FID instead of an FCM token. You can get it with `getId()` from React Native Firebase’s Installations module. Firebase doesn’t return an FCM token in FID mode. On a fresh iOS install, if you also turned off the SDK’s automatic token fetching and FCM auto-initialization (`FirebaseMessagingAutoInitEnabled`), neither the SDK nor Firebase registers the FID with FCM. Call `Messaging.messaging().register(completion:)` in native code before you read the FID.

To go back to FCM tokens, remove the FID setting and forward the token callbacks again.
