Как Firebase Cloud Messaging доставляет push-уведомления на iOS?

«Как Firebase Cloud Messaging доставляет push-уведомления на iOS?» — вопрос из категории Сети, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Firebase Cloud Messaging (FCM) использует Apple Push Notification service (APNs) в качестве транспортного канала для iOS-устройств. Это двухэтапный процесс:

Основной механизм доставки:

  1. Регистрация устройства: iOS-приложение запрашивает у APNs уникальный device token.
  2. Передача токена в FCM: Приложение передает этот токен в Firebase через SDK (Messaging.messaging().apnsToken).
  3. Отправка уведомления: Ваш backend-сервер отправляет сообщение на конечную точку FCM, указывая целевой токен устройства.
  4. Маршрутизация через APNs: FCM перенаправляет уведомление в APNs, которое напрямую доставляет его на устройство.

Пример кода регистрации токена:

func application(_ application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    // Передаем токен APNs в Firebase
    Messaging.messaging().apnsToken = deviceToken
}

Типы сообщений FCM:

  • Notification messages: Содержат предопределенные поля (title, body). Система iOS отображает их автоматически, когда приложение в фоне/закрыто. Обрабатываются APNs.
  • Data messages: Содержат произвольные ключ-значение данные. Всегда доставляются в приложение для обработки в фоне (application(_:didReceiveRemoteNotification:fetchCompletionHandler:)), даже если оно свернуто или закрыто.

Важно: Для локальных уведомлений (триггерных по времени или местоположению) используется UNUserNotificationCenter, а не FCM.