Push release guide

Push notification release checklist

A push in a development build does not prove that production signing, provider setup, permission, and device token match in the store build.

LaunchLint Academy

17 minute readEdited and source-checked by Rene DresselEditorial policy
Push message moves through APNs, FCM, permission, and production configuration to a phone
Push notifications combine user permission, platform capability, device token, provider configuration, and a comprehensible user choice. Successful development delivery does not prove the production path.
TL;DR

The short answer

Push notifications combine user permission, platform capability, device token, provider configuration, and a comprehensible user choice. Successful development delivery does not prove the production path.

  • Review the APNs environment, Android channels and POST_NOTIFICATIONS, token lifecycle, deep-link destinations, and behavior after denial, reinstall, or logout.

Evidence required for release

Do not review push notifications in the production release as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Keep three evidence layers separate for push notifications in the production release: statically visible project configuration, behavior on a clean device, and external settings in Apple Developer, App Store Connect, or Play Console. The review is reliable only when those layers describe the same release candidate. Give every mismatch an owner and a stop condition instead of assuming a default will be correct.

Evidence required for release

  • Production value for define notification purpose identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

1. Define notification purpose

Separate transactional, security, and optional marketing messages. Purpose determines timing and consent.

Do not review define notification purpose as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for define notification purpose identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

2. Check Apple capability and entitlement

Push capability must match App ID, bundle ID, signing, and aps-environment in the production artifact.

Do not review check apple capability and entitlement as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for check apple capability and entitlement identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

3. Configure the APNs provider

Review team, key or certificate, topic, production endpoint, rotation, and server-side error handling.

Do not review configure the apns provider as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for configure the apns provider identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

4. Handle Android permission and channels

Plan POST_NOTIFICATIONS, useful channels, and settings. Denial must not block the core app.

Do not review handle android permission and channels as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for handle android permission and channels identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

5. Resolve Expo and FCM

Verify project ID, google-services config, credentials, EAS profile, and native plugin values rather than only an Expo token.

Do not review resolve expo and fcm as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for resolve expo and fcm identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

6. Manage token lifecycle

Tokens change and expire. Bind them safely to account and device, remove stale values, and process provider feedback.

Do not review manage token lifecycle as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for manage token lifecycle identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

7. Secure payload and navigation

Minimize sensitive lock-screen content and validate every destination like an external deep link.

Do not review secure payload and navigation as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for secure payload and navigation identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

8. Test the release matrix

Test foreground, background, terminated, reinstall, upgrade, denial, multiple accounts, and expired sessions.

Do not review test the release matrix as an isolated switch. Connect it to push notifications in the production release, the signed production artifact, and the values in the store console. Record which file produces the setting, whether a framework or plugin can alter it during the build, and how you inspected the resolved value. A plausible entry in source control does not prove that the uploaded binary contains the same configuration.

Evidence required for release

  • Production value for test the release matrix identified
  • Responsible project file or store setting linked
  • Resolved native configuration inspected
  • Signed artifact checked on a clean device
  • iOS and Android differences recorded
  • Every mismatch has an owner and stop condition

Frequently asked questions

Why does push work in development but not the store build?

APNs environment, signing, bundle ID, FCM project, or build profile commonly differs.

Does Android always require permission?

Current Android versions require runtime permission for ordinary notifications; verify target-specific exceptions officially.

Can a push contain personal data?

Minimize it because lock screens and forwarding can expose content. Fetch sensitive detail securely inside the app.

Can LaunchLint send a test push?

No. It checks static configuration and contradictions but uses no operator credentials and never runs the app.

Official primary sources

This article is based on the following official primary sources. Store rules can change, so verify the current version before every submission.