Short answer
On Apple platforms the APNs token has to be available before you make FCM plugin calls, and it isn’t guaranteed to have arrived yet. Request notification permission, check that getAPNSToken() returns a value, then make your other FCM calls. If it never arrives, check that Push Notifications and the background modes are on in Xcode, that an APNs authentication key is uploaded in the Firebase console, and that method swizzling hasn’t been turned off.
What to check, in order
01
FCM is called before the APNs token arrives
“In iOS SDK 10.4.0 and higher, it is required that the APNs token is available before making API requests.” Firebase, FCM in Flutter apps
Firebase warns that the APNs token isn’t guaranteed to have been received before you make FCM plugin API requests. Request permission first, then check that getAPNSToken() returns a value before any other FCM call, as in Firebase’s example.
// You may set the permission requests to "provisional" which allows the user to choose what type // of notifications they would like to receive once the user receives a notification. final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true); // For apple platforms, make sure the APNS token is available before making any FCM plugin API calls final apnsToken = await FirebaseMessaging.instance.getAPNSToken(); if (apnsToken != null) { // APNS token is available, make FCM plugin API requests... }02
Push isn’t enabled in Xcode
“Before your application can start to receive messages, you must enable push notifications and background modes in your Xcode project.” Firebase, FCM in Flutter apps
Open ios/Runner.xcworkspace, add the Push Notifications capability, and turn on the Background fetch and Remote notifications background modes.
03
No APNs authentication key in Firebase
“Before you use FCM, upload your APNs authentication key to Firebase.” Firebase, FCM in Flutter apps
In the Firebase console, open Settings, then General, then the Cloud Messaging tab. Under iOS app configuration, upload a development or production APNs authentication key (at least one is required): the .p8 file, its key ID and your Apple team ID. Create the key in the Apple Developer Member Center if you don’t have one.
04
Method swizzling is turned off
“To use the FCM Flutter plugin on Apple devices, method swizzling is required.” Firebase, FCM in Flutter apps
If Info.plist sets FirebaseAppDelegateProxyEnabled to NO, swizzling is disabled, and the FCM Flutter plugin requires it. Remove the flag.
Checked against the vendor’s docs on : Firebase docs: Get started with FCM in Flutter apps; Firebase docs: FCM in Apple platform apps (method swizzling).
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way.See scope and start
Related: Flutter pod install failed · Expo push notifications not working · FCM legacy API shutdown