Для клиентских приложений Apple вы можете получать уведомления и полезные данные размером до 4000 байт через интерфейс APN Firebase Cloud Messaging.
Чтобы написать свой клиентский код на Objective-C или Swift, мы рекомендуем вам использовать FIRMessaging API . Пример быстрого запуска содержит образцы кода для обоих языков.
Переключение методов в Firebase Cloud Messaging
FCM SDK выполняет смену методов в двух ключевых областях: сопоставление вашего токена APNs с регистрационным токеном FCM и сбор аналитических данных во время обработки обратного вызова нисходящего потока . Разработчики, которые предпочитают не использовать swizzling, могут отключить его, добавив флаг FirebaseAppDelegateProxyEnabled
в файл Info.plist приложения и установив для него значение NO (логическое значение). Соответствующие разделы руководств содержат примеры кода как с включенным, так и без включенного переключения методов.
Добавьте Firebase в свой проект Apple
Если вы еще этого не сделали, добавьте Firebase в свой проект Apple .
Загрузите свой ключ аутентификации APNs
Загрузите свой ключ аутентификации APNs в Firebase. Если у вас еще нет ключа аутентификации APN, обязательно создайте его в 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()
Цель-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 обычно доставляют токен устройства APN при запуске приложения, FCM предоставляет токен регистрации через метод FIRMessagingDelegate
messaging:didReceiveRegistrationToken:
Пакет SDK FCM извлекает новый или существующий токен во время первоначального запуска приложения и всякий раз, когда токен обновляется или становится недействительным. Во всех случаях FCM SDK вызывает messaging:didReceiveRegistrationToken:
с допустимым токеном.
Токен регистрации может измениться, когда:
- Приложение восстановлено на новом устройстве
- Пользователь удаляет/переустанавливает приложение
- Пользователь очищает данные приложения.
Установить делегата обмена сообщениями
Чтобы получить токены регистрации, реализуйте протокол делегата обмена сообщениями и установите свойство delegate
FIRMessaging
после вызова [FIRApp configure]
. Например, если ваш делегат приложения соответствует протоколу делегата обмена сообщениями, вы можете установить делегат в application:didFinishLaunchingWithOptions:
самому себе.
Быстрый
Messaging.messaging().delegate = self
Цель-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)" } }
Цель-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. }
Цель-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 отключен: сопоставление вашего токена APNs и регистрационного токена
Если вы отключили смену методов или создаете приложение SwiftUI, вам необходимо явно сопоставить свой токен APNs с токеном регистрации FCM. Реализуйте application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
для получения маркера APNs, а затем установите свойство apnsToken
объекта Messaging
:
Быстрый
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Цель-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
Цель-C
[FIRMessaging messaging].autoInitEnabled = YES;
Это значение сохраняется при перезапуске приложения после его установки.
Следующие шаги
После того, как вы настроили свой клиент Apple, вы готовы добавить в свое приложение обработку сообщений и другие, более сложные функции. Дополнительные сведения см. в этих руководствах: