Начните работу с Firebase Cloud Messaging


В этом кратком руководстве описывается, как настроить Firebase Cloud Messaging в мобильных и веб-клиентских приложениях для надежной отправки сообщений. Сведения о серверных средах см. в разделе «Ваша серверная среда» и FCM .

Настройте клиентское приложение Firebase Cloud Messaging на платформах Apple

Для клиентских приложений Apple вы можете получать уведомления и полезные данные размером до 4096 байт через интерфейс APN Firebase Cloud Messaging .

Чтобы написать клиентский код на Objective-C или Swift, мы рекомендуем использовать API FIRMessaging . В примере быстрого запуска представлен пример кода для обоих языков.

Прежде чем начать, добавьте Firebase в свой проект Apple .

Метод Swizzling в Firebase Cloud Messaging

FCM SDK выполняет смену методов в двух ключевых областях: сопоставление вашего токена APN с регистрационным токеном FCM и сбор аналитических данных во время обработки обратного вызова сообщений . Разработчики, которые предпочитают не использовать swizzling, могут отключить его, добавив флаг FirebaseAppDelegateProxyEnabled в файл Info.plist приложения и установив для него значение NO (логическое значение). В соответствующих разделах руководств представлены примеры кода как с включенным, так и без включенным переключением методов.

Загрузите свой ключ аутентификации APNs

Загрузите ключ аутентификации APN в Firebase. Если у вас еще нет ключа аутентификации APN, обязательно создайте его в Центре участников Apple Developer .

  1. Внутри вашего проекта в консоли Firebase выберите значок шестеренки, выберите «Настройки проекта» , а затем выберите вкладку « Облачные сообщения» .

  2. В разделе «Ключ аутентификации APN» в разделе «Конфигурация приложения iOS» нажмите кнопку «Загрузить» , чтобы загрузить ключ аутентификации разработки, ключ аутентификации рабочей версии или и то, и другое. Требуется хотя бы один.

  3. Перейдите в папку, в которой вы сохранили ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Центре участников Apple Developer ) и нажмите «Загрузить» .

Зарегистрируйтесь для удаленных уведомлений

Либо при запуске, либо в нужном месте потока приложения зарегистрируйте приложение для удаленных уведомлений. Вызовите registerForRemoteNotifications , как показано:

Быстрый

UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Objective-C

[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

Доступ к регистрационному токену

По умолчанию FCM SDK создает токен регистрации для экземпляра клиентского приложения при запуске приложения. Подобно токену устройства APN, этот токен позволяет отправлять целевые уведомления любому конкретному экземпляру вашего приложения.

Точно так же, как платформы Apple обычно доставляют токен устройства APNs при запуске приложения, FCM предоставляет токен регистрации через messaging:didReceiveRegistrationToken: FIRMessagingDelegate . FCM SDK извлекает новый или существующий токен во время первоначального запуска приложения, а также всякий раз, когда токен обновляется или становится недействительным. Во всех случаях пакет SDK FCM вызывает messaging:didReceiveRegistrationToken: с действительным токеном.

Регистрационный токен может измениться в следующих случаях:

  • Приложение восстановлено на новом устройстве.
  • Пользователь удаляет/переустанавливает приложение
  • Пользователь очищает данные приложения.

Установить делегата обмена сообщениями

Чтобы получить токены регистрации, реализуйте протокол делегата обмена сообщениями и установите свойство delegate FIRMessaging после вызова [FIRApp configure] . Например, если делегат вашего приложения соответствует протоколу делегата обмена сообщениями, вы можете установить для делегата application:didFinishLaunchingWithOptions: самого себя.

Быстрый

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Получение текущего регистрационного токена

Токены регистрации доставляются с помощью метода messaging:didReceiveRegistrationToken: . Этот метод обычно вызывается один раз для каждого запуска приложения с использованием токена регистрации. Когда вызывается этот метод, это идеальное время для:

  • Если регистрационный токен новый, отправьте его на сервер приложений.
  • Подпишите токен регистрации на темы. Это требуется только для новых подписок или в случаях, когда пользователь переустановил приложение.

Вы можете получить токен напрямую, используя token(completion:) . Если получение токена по какой-либо причине не удалось, возвращается ненулевая ошибка.

Быстрый

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];

Вы можете использовать этот метод в любое время для доступа к токену вместо его хранения.

Обновление токена монитора

Чтобы получать уведомления об обновлении токена, предоставьте делегат, соответствующий протоколу делегата обмена сообщениями. В следующем примере делегат регистрируется и добавляется соответствующий метод делегата:

Быстрый

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
  print("Firebase registration token: \(String(describing: fcmToken))")

  let dataDict: [String: String] = ["token": fcmToken ?? ""]
  NotificationCenter.default.post(
    name: Notification.Name("FCMToken"),
    object: nil,
    userInfo: dataDict
  )
  // TODO: If necessary send token to application server.
  // Note: This callback is fired at each app startup and whenever a new token is generated.
}

Objective-C

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
    NSLog(@"FCM registration token: %@", fcmToken);
    // Notify about received token.
    NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
    [[NSNotificationCenter defaultCenter] postNotificationName:
     @"FCMToken" object:nil userInfo:dataDict];
    // TODO: If necessary send token to application server.
    // Note: This callback is fired at each app startup and whenever a new token is generated.
}

Альтернативно вы можете прослушивать NSNotification с именем kFIRMessagingRegistrationTokenRefreshNotification вместо предоставления метода делегата. Свойство token всегда имеет текущее значение токена.

Swizzling отключен: сопоставление вашего токена APN и регистрационного токена

Если вы отключили переключение методов или создаете приложение SwiftUI, вам необходимо явно сопоставить свой токен APN с регистрационным токеном FCM . Реализуйте метод application(_:didRegisterForRemoteNotificationsWithDeviceToken:) для получения токена APN, а затем установите свойство apnsToken для Messaging :

Быстрый

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

Objective-C

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

После создания регистрационного токена FCM вы можете получить к нему доступ и прослушивать события обновления, используя те же методы, что и при включенном режиме Swizzling.

Запретить автоматическую инициализацию

Когда создается регистрационный токен FCM , библиотека загружает идентификатор и данные конфигурации в Firebase. Если вы хотите сначала получить явное согласие пользователей, вы можете предотвратить создание токенов во время настройки, отключив FCM. Для этого добавьте значение метаданных в свой Info.plist (а не в GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

Чтобы снова включить FCM, можно выполнить вызов во время выполнения:

Быстрый

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

После установки это значение сохраняется при перезапуске приложения.

Отправить уведомление

  1. Установите и запустите приложение на целевом устройстве. На устройствах Apple примите запрос на разрешение на получение удаленных уведомлений.
  2. Убедитесь, что приложение работает в фоновом режиме на устройстве.
  3. В консоли Firebase откройте страницу «Сообщения» .
  4. Если это ваше первое сообщение, выберите Создать свою первую кампанию .
    1. Выберите Уведомления Firebase и нажмите Создать .
  5. В противном случае на вкладке «Кампании» выберите «Новая кампания» , а затем «Уведомления» .
  6. Введите текст сообщения.
  7. Выберите Отправить тестовое сообщение на правой панели.
  8. В поле « Добавить регистрационный токен FCM введите свой регистрационный токен.
  9. Выберите Тест .

После того, как вы выберете «Тест» , целевое клиентское устройство с приложением в фоновом режиме должно получить уведомление.

Подробнее о доставке сообщений в ваше приложение можно узнать на информационной панели отчетов FCM , которая записывает количество сообщений, отправленных и открытых на устройствах Apple и Android.

Следующие шаги

После настройки клиента Apple вы можете начать получать и отправлять сообщения своим пользователям: