Device Registration Issues
No push token
Symptoms: getDevicePushTokenAsync() throws or returns nothing
Common causes:
- Expo Go: Push tokens need a development build
- Emulator: Android emulators without Google Play can’t get push tokens
- Permission denied: User declined notification permission
- Missing Firebase config:
googleServicesFile isn’t set in app.json
Solutions:
- Run a development build on a physical device
- Check the Platform Setup is complete
- Check the permission in the device’s system settings
The iOS simulator gets a push token only with Xcode 14+ on a Mac with Apple silicon.
Device doesn’t appear in the dashboard
Symptoms: identify() throws, or the device is missing in the PNTA dashboard
Solutions:
- Verify project ID format:
prj_XXXXXXXXX
- Check the error message: it includes the status code
- Make sure you call
identify() with the token from getDevicePushTokenAsync(), not getExpoPushTokenAsync()
Notification Delivery Issues
Notifications not received
Solutions:
- Check that the device appears as active in the dashboard
- Check your APNs key and Firebase service account in Platform Keys
- Check the delivery logs in the dashboard for the APNs or FCM response
- Set a notification handler to see notifications while the app is open (see Quick Start)
Wrong bundle identifier or package name
Symptoms: APNs or FCM rejects the send in the delivery logs
Solutions:
- Make sure
ios.bundleIdentifier and android.package in app.json match the credentials you uploaded
Link Handling Issues
Tapping a notification doesn’t open the link
Symptoms: The app opens but doesn’t navigate to link_to
Solutions:
- Call
pnta.onNotificationTap() in your root component, so it also gets the tap that launched the app
- Make sure the callback calls
router.push(payload.link_to) (see Link Handling)
- Check that the route exists in your
app/ directory, for example app/profile.tsx for /profile
- Check the
link_to value you set when sending the notification
Getting Help
Email [email protected] or ask in Discord.