Push Notifications with Expo

Request permission well, store tokens, send pushes from the server and handle taps with deep links.

Notifications bring users back, and spam sends them away. Ask at the right moment and send only useful messages.

Core concepts

  1. Permission and token: Request permission after a user action, then get the push token and save it to the user's profile on your backend. — Expo Notifications
  2. Sending: Send from your server through Expo's push service or the platforms' services, never from the client. — Expo Notifications
  3. Handling taps: Attach a route or id in the notification data and deep-link to that screen on tap. — Expo linking
  4. Real devices and builds: Push needs a physical device and, for reliable behaviour, a development or production build with credentials configured. — Development builds

Concept videos

YouTube channels and searches for these topics. On a large screen they open in the reading panel next to the roadmap.

Explanation

Offer settings to control notification types, and honour opt-outs immediately.

Quiet failures

Tokens expire. Handle delivery errors by removing invalid tokens.

What Is It?

Push notifications deliver short messages to a phone even when the app is closed.

Why Should I Care?

They drive retention when relevant and drive uninstalls when not.

Real World Analogy

A push is a tap on the shoulder: welcome when it is useful, annoying when it is constant.

Visual Mental Model

text
permission -> token -> your server stores it -> server sends -> tap -> deep link

Smallest Possible Example

ts
import * as Notifications from 'expo-notifications';

export async function registerForPush() {
  const { status } = await Notifications.requestPermissionsAsync();
  if (status !== 'granted') return null;
  const token = await Notifications.getExpoPushTokenAsync();
  return token.data;
}

Common Mistakes

❌ Requesting permission on first launch.

Without context most users decline.

❌ Sending from the client.

Anyone could abuse your push credentials.

Build This Mini Project

Ask for permission after the user's first completed task, save the token and send yourself a test push that opens a specific screen.

Prompts for Cursor, Claude Code & Codex

Paste these into Cursor, Claude Code, Codex, or any coding agent. Replace the bracketed parts with your app details, and keep the agent in plan mode first so you review the approach before it edits files.

Push flow

text
Implement permission request, token storage in the profiles table, a server function that sends a push, and tap handling that deep-links using data.screen. Include invalid-token cleanup.

Rules, databases & blogs to use

Resources

Threads in the same domain as this chapter — go deeper on iHateReading without leaving the roadmap.

How to build an AI chat app with Vercel AI SDK and Firebase cover

How to build an AI chat app with Vercel AI SDK and Firebase

Chat UI, streaming and backend wiring for an AI feature.

10 payment gateways cover

10 payment gateways

Payment options compared for web and apps.

Smallest AI Agent cover

Smallest AI Agent

Minimal file-reading agent to learn LLM tool loops without framework magic.

15 micro-SaaS ideas actually making money in 2026 cover

15 micro-SaaS ideas actually making money in 2026

Product ideas small teams can ship.