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): theinstallationIdEnabled: trueoption of its plugin inapp.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 inonRegistered. - Off: they use the registration token.
You don't have to change your app's code.
- Capacitor and Cordova:
@capacitor/push-notificationsandcordova-plugin-pushstill 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());