iOS PlatformUpdated April 2026

iOS push notifications,
explained for builders

iOS push notifications are messages delivered to iPhones via APNs. They are interruptive and one-shot — for persistent, in-place updates use Live Activities. For ambient, glanceable info use widgets.

Quick answer

An iOS push notification is a message your server sends to Apple Push Notification service (APNs), which delivers it to a specific iPhone via a device token. iOS chooses how to display it (banner, alert, sound, badge, Notification Center). For real-time, in-place updates, use a special liveactivity push that updates a running Live Activity.

What Are iOS Push Notifications?

iOS push notifications are short messages your server sends to a user's iPhone (or iPad / Apple Watch / Mac) via Apple's servers. They can show as banners or alerts, play a sound, update an app badge, run code in the background, or update a Live Activity.

Pushes are one of three main “outside the app” surfaces on iOS, alongside widgets and Live Activities. Each is best for a different job:

  • Push: something happened. Read it, act on it, dismiss.
  • Widget: ambient info I want to glance at.
  • Live Activity: something is happening right now and I want to watch it update.

How APNs Works

1

Device registers

Your app calls registerForRemoteNotifications(); iOS asks APNs for a device token unique to (app, device, environment). You ship it to your server.

2

Server sends push

Your server makes an HTTP/2 request to APNs with a JWT auth token, the device token, and a JSON payload. APNs returns 200 immediately on success.

3

APNs delivers

APNs holds a persistent TLS connection to every Apple device. It pushes the message over that connection (or queues it if offline).

APNs is reliable but not transactional — it stores at most one undelivered push per token. Plan for delivery, but never assume it.

Notification Types

Alert (banner / list / Notification Center)

The default user-visible push. Shows title, subtitle, body, sound, badge.

Silent / background

No UI. content-available: 1 wakes your app to fetch fresh data. Aggressively rate-limited by iOS.

Rich (with media)

Add images, audio, GIFs, or short video using a Notification Service Extension and a media URL.

Time-sensitive

Bypasses Focus modes and Do Not Disturb when truly urgent (deliveries, security alerts). Requires entitlement and category.

Critical

Plays a sound even when silenced. Requires Apple approval and a special entitlement (medical, public safety).

Live Activity push (liveactivity)

Updates the content state of an active Live Activity using the activity-specific push token.

Communication (Communication Notifications)

Shows the sender’s photo and name, can be interactive (reply inline). Requires INSendMessageIntent donation.

Push to Talk (PTT framework)

Voice-channel push notifications for walkie-talkie style apps. Handled by the Push To Talk framework.

Permission & Authorization

1

Explicit request

Call UNUserNotificationCenter.current().requestAuthorization(options:). The first time, the user sees the system prompt.

2

Provisional authorization

Pass .provisional and the user is opted in silently to Quiet notifications (delivered to Notification Center only). They can promote you to alerts later.

3

Ephemeral / App Clip

.ephemeral grants short-lived permission for App Clips so they can show a quick notification.

Best practice: do not ask immediately on first launch. Ask in context, after the user has done something that makes notifications obviously useful.

The Notification Payload

APNs payloads are JSON, with the standard fields under aps and any custom fields alongside.

{
  "aps": {
    "alert": {
      "title": "Order shipped",
      "subtitle": "Arrives Friday",
      "body": "Tap to track your package."
    },
    "sound": "default",
    "badge": 1,
    "interruption-level": "time-sensitive",
    "thread-id": "order-1234"
  },
  "orderId": "1234",
  "deepLink": "newly://orders/1234"
}

Other useful header values: apns-priority (10 = immediate, 5 = power friendly), apns-push-type (alert, background, liveactivity, voip, complication), apns-topic (your bundle ID).

Push vs Live Activities

Push notification

Single, interruptive, lives in Notification Center. Best for "something happened, look".

Live Activity

Persistent, in-place, lives on Lock Screen + Dynamic Island. Best for "something is happening, watch".

In practice you often use both: a push starts the conversation (“Driver is on the way”), a Live Activity keeps it updated, a final push closes it (“Delivered”).

Android Equivalents

The Android equivalent of APNs is Firebase Cloud Messaging (FCM). Persistent, in-place updates use Android ongoing notifications, often paired with a foreground service. Newer Live Updates in Material You add richer, more Live-Activity-like behavior.

Frequently Asked Questions

What is APNs?

APNs (Apple Push Notification service) is the global Apple-run network that delivers push notifications to iPhones, iPads, Macs, Apple Watches, and Apple TVs. Your server talks to APNs over HTTP/2 with a JWT token; APNs talks to the device.

How do iOS push permissions work?

iOS apps must explicitly request notification permission. Until granted, you cannot show alerts, play sounds, or update badges. Provisional authorization (introduced in iOS 12) lets you deliver Quiet notifications without an upfront prompt to test the user’s interest.

What is the difference between a push notification and a Live Activity?

A push notification is one-shot and interruptive — it appears, the user reads it, it goes to Notification Center. A Live Activity is persistent and updates in place on the Lock Screen and Dynamic Island while an event is in progress. Live Activities can themselves be updated via a special push of type "liveactivity".

What is a silent push?

A push that wakes your app in the background to do work without showing UI. Set "content-available": 1 in the aps payload and omit alert/sound/badge. iOS rate-limits silent pushes aggressively, so use them sparingly.

What are rich notifications?

Notifications that include media (image, gif, short video, audio) or custom interactive UI. Powered by Notification Service Extension (modify before display) and Notification Content Extension (custom UI when expanded).

How do I send pushes from React Native or Expo?

In Expo, use Expo’s push notification service which proxies to APNs and FCM with a single API. In bare React Native, use a library like Notifee or react-native-push-notification plus your backend speaking to APNs over HTTP/2. Newly wires this up automatically.

Ship a real iOS app with push, widgets, and Live Activities.

Newly turns a one-line idea into a complete native iOS + Android app — APNs, FCM, widgets, Live Activities, the lot. With React Native source code you own.