Troubleshooting

The most common causes when a notification doesn't arrive and how to fix them.

If suddenly nothing arrives, first check the status page: if there's an incident or maintenance in progress, it's published there and updated until it's resolved.

If the service is operational, open the app's Troubleshooter in the panel: it checks the device's token, credential, environment, permission and last delivery, and tells you the first step that fails. The Device debugger shows each delivery with Google's or Apple's exact error.

It doesn't arrive on iPhone

  1. Which token does it have? In Devices, check the type (APNs or FCM).
    • APNs: you need the .p8 or .p12 in Pushtifly.
    • FCM: you need the APNs key inside Firebase.
    • See iOS via FCM.
  2. The Push Notifications capability enabled in Xcode, and the provisioning profile regenerated afterwards.
  3. Permission: the user must have accepted. notificationsEnabled: false indicates it.
  4. Bundle ID: the credential's must be the app's (TopicDisallowed).

BadDeviceToken

It's almost always mixed environments: an app installed from Xcode (sandbox) gets a send to production, or the other way around.

  • With environment: "auto", Pushtifly tries the other environment and corrects itself.
  • If you see it repeatedly, the integration status flags it and tells you which app and environment to check.

It works in debug but not in TestFlight

TestFlight and App Store builds use production; Xcode builds, sandbox. Check:

  • that the credential covers production (the .p8 covers both);
  • that you don't force environment: "sandbox" when registering.

Expired certificate

Sends to iOS fail with 5003. Upload a new .p12 or, better, switch to the .p8 key, which doesn't expire.

It isn't shown with the app open

That's normal behavior for many libraries: with the app open, the notification reaches your code but isn't shown. Show it yourself; each framework guide explains how.

Expo token (2006)

ExponentPushToken[…] doesn't work. Use getDevicePushTokenAsync(). See Expo.

Capacitor iOS without an APNs credential

@capacitor/push-notifications delivers the Apple token on iOS. Upload the .p8 to Pushtifly. See Capacitor.

White square on Android

The small icon isn't monochrome. Use a white-on-transparent one and declare it as default_notification_icon.

Android: it doesn't arrive with the app closed on some phones

Some manufacturers (Xiaomi, Huawei, Oppo, Samsung with aggressive saving) close apps in the background. Send with priority: "high" and ask the user to exclude the app from battery saving.

Images aren't shown on iOS

The Notification Service Extension is missing. See Media.

Sends stay queued

Check in the history whether the send is scheduled, whether the credential is invalid or expired (sends wait until you fix it) or whether you reached the quota (3001).