# NOTIF-ADR-004 — FCM installation id is the primary target ## Status Accepted. ## Context Firebase now recommends the installation id (FID) and treats registration-token multicast paths as legacy. A contact point model built on a single `token` string would encode the older model as the only one, and a later migration would be a runtime interpretation problem: the same string field would mean different things for different rows. ## Decision `MobilePushTarget` is a sealed hierarchy of `FcmInstallationId`, `LegacyFcmRegistrationToken` and `ApnsDeviceToken`. The kinds are separate types, never a discriminator on one string field, and each carries its own `ContactPointType` so the uniqueness scope and the encryption associated data differ. APNs tokens additionally carry their environment, because sandbox and production are separate namespaces rather than a flag. ## Consequences Migrating a target kind is a compile-time change with an exhaustive `switch`, not a runtime guess. The adapter maps each kind to its own wire representation, so a provider changing one path cannot silently change the other. The cost is one more type than a string field would need.