Для клиентских приложений Apple вы можете получать уведомления и полезные данные объемом до 4096 байт через интерфейс Firebase Cloud Messaging APNs.
Для написания клиентского кода на Objective-C или Swift мы рекомендуем использовать API FIRMessaging . Пример быстрого старта содержит образец кода для обоих языков.
Метод свизлинга в Firebase Cloud Messaging
FCM SDK выполняет метод swizzling в двух ключевых областях: сопоставление вашего токена APNs с токеном регистрации FCM и сбор аналитических данных во время обработки обратного вызова нисходящего сообщения . Разработчики, которые предпочитают не использовать swizzling, могут отключить его, добавив флаг FirebaseAppDelegateProxyEnabled
в файл Info.plist приложения и установив его на NO (логическое значение). Соответствующие разделы руководств содержат примеры кода как с включенным методом swizzling, так и без него.
Добавьте Firebase в свой проект Apple
Если вы еще этого не сделали, добавьте Firebase в свой проект Apple .
Загрузите свой ключ аутентификации APNs
Загрузите свой ключ аутентификации APNs в Firebase. Если у вас еще нет ключа аутентификации APNs, обязательно создайте его в Apple Developer Member Center .
Внутри вашего проекта в консоли Firebase выберите значок шестеренки, выберите Параметры проекта , а затем выберите вкладку Облачные сообщения .
В разделе «Ключ аутентификации APNs» в разделе «Конфигурация приложения iOS» нажмите кнопку «Загрузить» .
Перейдите к месту, где вы сохранили свой ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Apple Developer Member Center ) и нажмите «Загрузить» .
Зарегистрируйтесь для получения удаленных уведомлений
Либо при запуске, либо в желаемой точке потока вашего приложения зарегистрируйте свое приложение для удаленных уведомлений. Вызовите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 генерирует регистрационный токен для экземпляра клиентского приложения при запуске приложения. Подобно токену устройства APNs, этот токен позволяет отправлять целевые уведомления любому конкретному экземпляру вашего приложения.
Точно так же, как платформы Apple обычно предоставляют токен устройства APNs при запуске приложения, FCM предоставляет токен регистрации через метод FIRMessagingDelegate
's messaging:didReceiveRegistrationToken:
:. FCM SDK извлекает новый или существующий токен во время первоначального запуска приложения и всякий раз, когда токен обновляется или становится недействительным. Во всех случаях FCM SDK вызывает 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
вместо предоставления метода делегата. Свойство токена всегда имеет текущее значение токена.
Swizzling отключен: сопоставление вашего токена APNs и регистрационного токена
Если вы отключили метод swizzling или создаете приложение SwiftUI, вам нужно будет явно сопоставить свой токен APNs с токеном регистрации FCM . Реализуйте метод application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
для получения токена APNs, а затем задайте свойство 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 вы можете получить к нему доступ и прослушивать события обновления, используя те же методы, что и при включенном свизлинге.
Запретить автоматическую инициализацию
При генерации регистрационного токена FCM библиотека загружает идентификатор и данные конфигурации в Firebase. Если вы хотите сначала получить явное согласие от пользователей, вы можете предотвратить генерацию токена во время настройки, отключив FCM. Для этого добавьте значение метаданных в свой Info.plist
(не GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Чтобы повторно включить FCM, вы можете выполнить вызов во время выполнения:
Быстрый
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
После установки это значение сохраняется при перезапуске приложения.
Следующие шаги
После настройки клиента Apple вы готовы добавить обработку сообщений и другое, более продвинутое поведение в свое приложение. Для получения дополнительной информации см. эти руководства:
- Получайте сообщения в приложении Apple
- Отправить тематические сообщения
- Отправить в группы устройств