deep-linking
Deep links, universal links and app links in React Native. Use when links do not open the app, for apple-app-site-association or assetlinks.json, lost…
Push notifications in React Native and Expo. Use when notifications do not arrive, for FCM or APNs credentials, DeviceNotRegistered or InvalidCredentials errors, foreground handling, Android channels, scheduled notifications, Expo Go limits.
$ npx -y skills add AnilBurcu/claude-code-react-native --skill push-notifications --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/push-notificationsContext preview
The summary Claude sees to decide when to auto-load this skill.
Push notifications in React Native and Expo. Use when notifications do not arrive, for FCM or APNs credentials, DeviceNotRegistered or InvalidCredentials errors, foreground handling, Android channels, scheduled notifications, Expo Go limits.
name: push-notifications description: Push notifications in React Native and Expo. Use when notifications do not arrive, for FCM or APNs credentials, DeviceNotRegistered or InvalidCredentials errors, foreground handling, Android channels, scheduled notifications, Expo Go limits. user-invocable: false
The classic self-inflicted wound is mixing lanes: registering an Expo push token but sending through FCM directly, or vice versa. A token only works with the service it belongs to. Decide once, document it in the repo, and delete the code paths of the other lane.
**Expo Go is not a push test bed.** Since SDK 53, remote push through expo-notifications does not work in Expo Go on Android at all; a development build is required. Local notifications still work there, which is why the gap gets blamed on credentials instead. Test push in a development build or a release build, never in Expo Go.
**iOS (APNs)**
**Android (FCM)**
1. Which build produced the token? Expo Go on Android cannot receive remote push since SDK 53, so anything observed there is not evidence. Repeat on a development or release build first. 2. Which lane is the token from, and did the send go through that lane's service? 3. Credentials: APNs key present for this app's team and bundle id? FCM V1 service account uploaded and google-services.json matching the applicationId? 4. Is the token current? Reinstall the app, register the fresh token, send to exactly that token. 5. Payload: silent/data-only messages are throttled aggressively by both platforms; visible notifications with title and body are the honest test. 6. Device state: battery savers and doze delay delivery legally. Test with the app freshly backgrounded on a charged, awake device before blaming the pipeline. 7. Read the actual per-token API response (ticket, receipt or FCM error), not your server's aggregate log line. The reason is usually printed there verbatim.
Claude knows React. It doesn't know why your pod install just failed. A Claude Code plugin that adds the React Native knowledge you only get from shipping apps: build failure triage, SDK upgrades that don't eat a weekend, Hermes crash decoding, push
Repo: AnilBurcu/claude-code-react-native
Deep links, universal links and app links in React Native. Use when links do not open the app, for apple-app-site-association or assetlinks.json, lost…
EAS builds, OTA updates and store submission. Use for eas.json profiles, safe OTA publishing, App Store or Play Store submission, store rejections, versioning…
Upgrading Expo SDK and React Native safely. Use when bumping the SDK or react-native, or when the app broke after an upgrade: upgrade order, expo install…
Diagnose and fix a failing iOS or Android build. Use when the build is broken, pod install or Gradle fails, or the user asks to fix a native build error.
Decoding Hermes crashes and minified production stack traces. Use for "address at index.android.bundle" frames, unsymbolicated or badly grouped Sentry events,…
In-app purchases and subscriptions with RevenueCat. Use for paywalls, odd sandbox behavior, premium not arriving after purchase, webhook verification, restore…