Перейти к содержанию
Innovialabs

Как работают push-уведомления на iOS и Android

Основы3 мин

Коротко

Ваш сервер не отправляет push напрямую на телефон: он передает сообщение с токеном устройства в сервис платформы — APNs у Apple или Firebase Cloud Messaging у Google, — а тот доставляет его на устройство. Показать уведомление можно только с разрешения пользователя.

Коротко о главном

Push-уведомление проходит через посредника. Приложение не держит постоянное соединение с вашим сервером — это разряжало бы батарею. Вместо этого операционная система поддерживает одно общее соединение с сервисом платформы:

  • APNs (Apple Push Notification service) — для iOS, iPadOS, macOS и watchOS;
  • FCM (Firebase Cloud Messaging) — для Android, а также как единая точка входа, которая умеет отправлять и на iOS через APNs.

Ваш сервер отправляет сообщение в APNs или FCM, а они доставляют его на нужное устройство.

Путь уведомления от сервера до экрана

  1. Приложение регистрируется в системе push при запуске.
  2. Платформа выдает токен — уникальный адрес конкретной установки приложения на конкретном устройстве.
  3. Приложение отправляет токен на ваш бэкенд, где он сохраняется вместе с ID пользователя.
  4. Сервер формирует сообщение и отправляет его в APNs или FCM, указывая токен.
  5. Сервис доставляет сообщение на устройство, когда оно в сети.
  6. ОС показывает уведомление или будит приложение для обработки данных.

Токены устройств

Токен — не постоянный идентификатор. Он может измениться после переустановки приложения, восстановления устройства из бэкапа или по решению платформы. Поэтому:

  • обновляйте токен на сервере при каждом запуске, если он изменился;
  • удаляйте токены, на которые APNs или FCM возвращают ошибку «недействителен»;
  • храните несколько токенов на пользователя — у человека может быть телефон и планшет.

Как сервер отправляет push

Для APNs сервер аутентифицируется ключом .p8 из аккаунта Apple Developer (или сертификатом) и отправляет запрос по HTTP/2. Минимальный payload выглядит так:

{
  "aps": {
    "alert": { "title": "Заказ в пути", "body": "Курьер приедет через 15 минут" },
    "sound": "default"
  },
  "order_id": "4821"
}

Для FCM используется HTTP v1 API с OAuth-токеном сервисного аккаунта:

{
  "message": {
    "token": "DEVICE_TOKEN",
    "notification": { "title": "Заказ в пути", "body": "Курьер приедет через 15 минут" },
    "data": { "order_id": "4821" }
  }
}

Подробности — в официальной документации Firebase Cloud Messaging.

Видимые и тихие уведомления

ТипЧто делаетНужно разрешениеГарантия доставки
ВидимоеПоказывает баннер, звук, бейджДаВысокая
Тихое (silent)Будит приложение в фоне без показаНетНе гарантируется

Тихие уведомления на iOS отправляются с content-available: 1 и используются для фоновой синхронизации. Система ограничивает их частоту и может отложить или пропустить, если батарея на исходе или приложение принудительно закрыто. На Android аналог — data-сообщения без блока notification; их обрабатывает код приложения.

Не стройте критичную логику только на тихих пушах: это подсказка «стоит обновиться», а не надежный канал.

Правила разрешений

  • iOS: показ уведомлений всегда требует явного разрешения пользователя через системный диалог. Есть provisional-режим: уведомления приходят тихо в Центр уведомлений без запроса, и пользователь сам решает, оставить ли их.
  • Android: в современных версиях системы приложение тоже должно запросить разрешение POST_NOTIFICATIONS. Кроме того, уведомления группируются по каналам, и пользователь может отключить каждый канал отдельно.

Системный диалог на iOS показывается один раз. Если пользователь отказал, вернуть разрешение можно только через настройки.

Как не потерять разрешение

  • Не запрашивайте доступ при первом запуске без контекста.
  • Сначала объясните пользу на своем экране: «Сообщим, когда курьер будет рядом».
  • Запрашивайте в момент, когда польза очевидна, например после оформления заказа.
  • Дайте настройки внутри приложения: какие темы присылать, а какие нет.

Частые вопросы

Да. Сервер может работать напрямую с APNs. Firebase удобен, когда нужна одна точка отправки на обе платформы.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.