One send flow, four platforms
FCM HTTP v1 does not know or care what platform a device token belongs to — the same messages:send request works whether the token came from an Android app, an iOS app, Flutter, or a website. What changes between platforms is how the client SDK generates that token, and how the operating system chooses to display what you send.
Android
The Firebase Messaging SDK's getToken() call returns the registration token. Android needs a notification channel configured in the app for notification messages to display with the right importance and sound; the android.notification.channel_id field in the payload must match one the app has created.
iOS
iOS requires an APNs authentication key or certificate uploaded to the Firebase project before FCM can deliver to iOS devices at all. The device token still comes from Firebase's SDK, but delivery is relayed through Apple Push Notification service. Foreground display, sound and badge count are controlled by the apns.payload.aps block.
Flutter
The firebase_messaging package exposes FirebaseMessaging.instance.getToken() for a single cross-platform token call, but the underlying delivery still goes through the native Android or iOS path above — a Flutter iOS build still needs APNs configured in Firebase.
Web
Web push requires a registered service worker and the user granting notification permission in the browser. The token is generated by getToken() from the Firebase JS SDK with a VAPID key, and click behavior can be controlled with the webpush.fcm_options.link field.
Whichever platform you are testing, paste the token it produced into the FCM notification tester along with your service account JSON to send a real message to that specific device.