Push notifications
Expo by default, OneSignal for deep links — registration is automatic, sending is a founder clicking a button.
Setup
Nothing to configure for the default path — Expo push works the moment a device registers, using the credentials in your own EAS project. OneSignal is optional, and exists for one reason: an app using react-native-onesignal lets OneSignal own the notification-tap handler, so a push sent through Expo can arrive but can't deep-link anywhere. Connecting OneSignal (app ID + REST key, from the dashboard's Push tab) fixes that for apps built that way.
Device registration
Growth.registerForPush() prompts for permission if it hasn't been asked yet. Separately, the SDK silently re-registers on every launch only if permission is already granted — it never prompts on its own, because a permission dialog on first launch is the fastest way to get permanently denied.
Expo Go can't receive push
This has been true since Expo SDK 53 — a development build is required. Registration still succeeds in Expo Go; nothing arrives.
Sending
Compose from Dashboard → Push: a title, a body, and a target — everyone, one of four billing cohorts (paid / trial / free — derived from each user's most recent billing event), or a single user found by search. No scheduling exists; every send is immediate.
Deep-link delivery
Set a route and the tap payload carries it through. Which channel handles the tap depends on what you set:
- No route, or channel unset → Expo. The payload rides in the notification's data field; your app reads it from the standard Expo notification-response handler.
- A route is set and OneSignal is connected → OneSignal, automatically. The same payload arrives as
additionalData, read by whatever tap handlerreact-native-onesignalalready gave you.
OneSignal targeting needs an account ID
Non-broadcast sends through OneSignal — a cohort, or a single user — resolve only through the account ID you passed the SDK. If your app never calls the identity function with one, the send can return success with zero recipients: OneSignal has nobody to match the send against, even though the same user is findable by device ID or RevenueCat ID everywhere else in the dashboard.
The SDK itself never handles the notification tap — registration is all it does. Reading the deep-link payload and navigating on tap is the host app's responsibility either way.