Firebase Installation ID (FID)

Firebase is replacing the FCM registration token with the Installation ID. Pushtifly accepts both.

Firebase deprecated the FCM registration token (getToken, onTokenRefresh) in favor of the Firebase Installation ID (FID) (register, onRegistered). Both work during the transition, and Firebase hasn't announced a retirement date for the token yet.

Pushtifly accepts both with no changes on your server:

Identifier Shape How Pushtifly sends it
Registration token Long (over 100 characters), with : message.token
Installation ID 22 characters (A-Z a-z 0-9 _ -), starts with c, d, e or f message.fid

Register the FID just like a token, with POST /v1/devices, provider: "fcm" and in the token field. Each app's integration status shows how many devices still use the registration token.

Turn on Installation ID mode in the app

It's a Firebase option in the app. When you turn it on, Firebase disables getToken and onTokenRefresh.

  • Android, in AndroidManifest.xml:

    <meta-data android:name="firebase_messaging_installation_id_enabled" android:value="true" />
  • iOS, in Info.plist: FirebaseMessagingInstallationIdEnabled = YES.

  • Expo (@react-native-firebase/messaging): the installationIdEnabled: true option of its plugin in app.json.

Pushtifly SDKs

The Android, Flutter and React Native / Expo SDKs detect that option automatically:

  • On: they use register() and register the FID that arrives in onRegistered.
  • Off: they use the registration token.

You don't have to change your app's code.

  • Capacitor and Cordova: @capacitor/push-notifications and cordova-plugin-push still deliver the registration token. When they deliver the FID, Pushtifly will accept it with no changes.
  • Native iOS: it uses direct APNs, so it's not affected. If your app uses Firebase on iOS, pass the FID with Pushtifly.setFCMToken(fid).

Without the SDK

// Android: with the option on, the FID arrives at your FirebaseMessagingService
override fun onRegistered(fid: String) = registerInPushtifly(fid)
FirebaseMessaging.getInstance().register()
// Flutter (firebase_messaging 17+)
FirebaseMessaging.instance.onRegistered.listen(registerInPushtifly);
await FirebaseMessaging.instance.register();
// React Native (@react-native-firebase/messaging 27+)
import { getMessaging, onRegistered, register } from '@react-native-firebase/messaging';
onRegistered(getMessaging(), registerInPushtifly);
await register(getMessaging());