Push troubleshooting
Diagnose push failures specific to the React Native bridge. For native APNs/FCM configuration issues, this page links out to the platform guides.
Because the React Native SDK wraps the native iOS and Android push stacks, most delivery problems are actually native configuration issues. Start with the platform-native troubleshooting guides for APNs/FCM setup, certificates, and delivery diagnostics:
- iOS Push Troubleshooting — sandbox vs production environments, APNs error codes, and Notification Service Extension issues.
- Android Push Troubleshooting — FCM setup,
google-services.json, and channel/permission issues.
This page covers only the failures that are unique to the React Native layer.
On this page
Token never reaches ZMP
If the device registers a token natively but ZMP never targets it:
- Confirm the token is forwarded. The token must reach the SDK via
ZetaClient.user.updateDeviceToken(token)— either from your native code or by listening forZetaCoreEvents.DeviceTokenDelegateafter callingZetaClient.push.fetchToken(). See Forward the device token. - Verify the module is linked. Run
npx react-native configand confirmzetakit_reactnativeappears under dependencies. On iOS, runcd ios && pod install. - Check permissions. On iOS, and on Android 13+, a token is only useful once the user grants notification permission. Call
ZetaClient.push.requestNotificationPermissions().
JavaScript events never fire
If push clicks or deep links work natively but your JS listeners are silent:
- Register listeners early. Add your
NativeEventEmitter(iOS) /DeviceEventEmitter(Android) listeners immediately afterZetaClient.initialize(). A listener registered after an event fires (for example, after a cold-start deep link) misses that event. - Use the right emitter per platform. Use
new NativeEventEmitter(ZetaClient.bridge)on iOS andDeviceEventEmitteron Android. - Handle Android intents separately. On Android, deep links arrive as intents, not through
DeeplinkDelegate. Read the launching intent withZetaClient.push.getInitialIntent()and listen forZetaCoreEvents.AndroidInitialIntent/AndroidNewIntent. See Handle Android deep links.
Notifications arrive in the wrong environment
If test pushes work but production pushes do not (or vice versa) on iOS:
- Check
appEnvironment. TheappEnvironmentfield inZTConfig(ZTAppEnvironment.SANDBOXvsZTAppEnvironment.PRODUCTION) must match the APNs environment your build is signed for. A debug build using a production value — or a release build using sandbox — will fail to receive notifications. See iOS Push Troubleshooting.
See also
- Push Notifications — the full React Native push integration guide.
- Testing and QA — verify your push integration before release.
- Platform support — feature availability by platform and SDK version.

