Перейти к основному содержимому
Документация для версии v73

Firebase Cloud Messaging

Шаг 1. Настройки проекта Firebase Cloud Messaging

  • Выполните создание проекта Firebase;
  • Зарегистрируйте новое приложение в проекте:

  • Выполните загрузку GoogleSrvice-Info.plist;


  • Перейдите в настройки проекта -> Cloud Messaging -> Apple app configuration;
  • Добавьте необходимые данные APNs Authentication Key (необходимо предварительно создать ключ на Apple Developer):


Укажите следующие данные:

  • загрузите загруженный файл-.p8
  • укажите key ID
  • укажите team ID


Шаг 2. Настройка ресурса Altcraft

  • укажите messagingSenderId;
  • укажите projectId;
  • загрузите Firebase-файл с приватным ключом (.json). Файл создается в разделе Project setting -> Service account.


Шаг 3. Интеграция Firebase Cloud Messaging в проект приложения

  • Переместите загруженные файл GoogleSrvice-Info.plist в папку приложения (app);

  • Добавьте пакет Firebase c помощью Swift Package Manager — репозиторий Firebase. Версия пакета Firebase должна быть совместима с версией XCODE.

  • General:

    • Проверьте, что библиотека FirebaseMessaging добавлена в Frameworks, Libraries, and Embedded Content таргета приложения.
  • Signing & Capabilities:

    • PushNotifications;

Опция 1: FirebaseAppDelegateProxyEnabled — YES (По умолчанию для Firebase Messaging)

  1. Добавьте протокол MessagingDelegate к AppDelegate:

    class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {}

Это позволит получать callback с актуальным FCM-токеном через метод messaging(_:didReceiveRegistrationToken:).

  1. Инициализируйте Firebase в didFinishLaunchingWithOptions:

    FirebaseApp.configure()
    Messaging.messaging().delegate = self
    application.registerForRemoteNotifications()
  2. Реализуйте метод делегата для получения токена:

    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
    guard let token = fcmToken else { return }
    print(" FCM Token: \(token)")
    }
Полный пример инициализации Firebase и получения FCM-токена
import SwiftUI
import FirebaseCore
import FirebaseMessaging
import Altcraft

@main
struct IOSQuickStartApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate

var body: some Scene {
WindowGroup {
ContentView()
}
}
}

class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate, UNUserNotificationCenterDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
///Инициализация Firebase
FirebaseApp.configure()
///Установка делегата
Messaging.messaging().delegate = self
application.registerForRemoteNotifications()

return true
}

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
if let token = fcmToken {
//fcm токен
}
}
}

Опция 2: FirebaseAppDelegateProxyEnabled - NO

  1. В настройках таргета приложения:

    • Info:
      • Добавьте ключ FirebaseAppDelegateProxyEnabled (Boolean) с значением NO в Info приложения.


  1. Протокол MessagingDelegate в таком случае не требуется. При отключённом FirebaseAppDelegateProxyEnabled Firebase не выполняет автоматический swizzling AppDelegate, поэтому SDK сам управляет установкой и обработкой APNs- и FCM-токенов. Делегат MessagingDelegate в этом случае не нужен.

  2. Инициализация Firebase в didFinishLaunchingWithOptions:

   func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
return true
}
  1. Получение и сохранение APNs-токена в didRegisterForRemoteNotificationsWithDeviceToken:
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
return true
}

func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken apnsToken: Data
) {
// Сохраните токен для последующего использования при запросе FCM-токена
setAPNsTokenInUserDefault(apnsToken)
}
}

Шаг 4. Ручная установка APNs-токена в Firebase Messaging перед запросом FCM-токена

Пример внутри провайдера SDK
import FirebaseMessaging
import Altcraft

class FCMProvider: FCMInterface {

/// Retrieves the current FCM token.
func getToken(completion: @escaping (String?) -> Void) {

/// APNs-токен, извлечённый из UserDefaults
let apnsToken = getAPNsTokenDataFromUserDefaults()

/// Устанавливаем APNs-токен вручную перед запросом FCM-токена
Messaging.messaging().apnsToken = apnsToken

/// Запрашиваем FCM-токен
Messaging.messaging().token { token, error in
if error != nil {
completion(nil)
} else {
completion(token)
}
}
}

/// Deletes the current FCM token.
func deleteToken(completion: @escaping (Bool) -> Void) {
Messaging.messaging().deleteToken { error in
if error != nil {
completion(false)
} else {
completion(true)
}
}
}
}