Framework Recipes
The common pattern for any framework — get the native APNs/FCM token, register it with a stable deviceId, verify with a test send — with per-framework recipes for Expo, bare React Native, Flutter, Swift and Kotlin.
Every framework follows the same four steps — only "get the token" changes:
Get the platform token
- iOS: the APNs device token (hex string) — delivered to your app delegate / messaging library.
- Android: the FCM registration token.
Whichever library hands you the token is fine — FCM's SDK on Android, APNs directly on iOS, firebase_messaging on Flutter, expo-notifications' getDevicePushTokenAsync() in a development build.
Register it with a stable deviceId
POST https://app.nativenotify.com/api/universal/device/register
Send the token in tokens.apnsToken (iOS) or tokens.fcmToken (Android), plus a deviceId you persist across launches, and subscriberId when the user is logged in. Full contract: Device Registration.
Verify with a test send
Send to that exact deviceId and read the honest result — Verify Delivery.
Send to an audience
All devices, a device list, or a subscriber list — Send Notifications. And remember the app needs its push credentials saved before anything is actually delivered.
Recipes
| Framework | Token source | Recipe |
|---|---|---|
| Expo (React Native) | SDK (Expo path) or expo-notifications native token | Expo recipe |
| Bare React Native | @react-native-firebase/messaging / APNs delegate | Bare React Native recipe |
| Flutter | firebase_messaging | Flutter recipe |
| Swift (native iOS) | UIApplicationDelegate + APNs | Swift recipe |
| Kotlin (native Android) | FirebaseMessaging | Kotlin recipe |
Not listed?:
The recipes only differ in how you obtain a token. .NET, Unity, a KMP app, a backend that holds device tokens — anything that can produce an APNs .p8-signed token or an FCM token through its SDK can register with the same JSON contract. Start from Device Registration.