| Выберите платформу: | iOS+ Android Web Flutter Unity C++ |
В этом руководстве описано, как начать работу с Firebase Cloud Messaging в клиентских приложениях для платформы Apple (например, iOS), чтобы вы могли надежно отправлять сообщения.
Для клиентских приложений Apple вы можете получать уведомления и данные объемом до 4096 байт через интерфейс APNs Firebase Cloud Messaging .
Для написания клиентского кода на Objective-C или Swift мы рекомендуем использовать API FIRMessaging . В примере быстрого запуска представлен образец кода для обоих языков.
Прежде чем начать, добавьте Firebase в свой проект Apple .
Подмена методов в Firebase Cloud Messaging
SDK FCM выполняет подмену методов в двух ключевых областях: сопоставление токена APNs с токеном регистрации FCM и сбор аналитических данных во время обработки обратных вызовов сообщений . Разработчики, которые предпочитают не использовать подмену методов, могут отключить её, добавив флаг FirebaseAppDelegateProxyEnabled в файл Info.plist приложения и установив для него значение NO (логическое значение). В соответствующих разделах руководств приведены примеры кода как с включенной, так и с выключенной подменой методов.
Загрузите ключ аутентификации APNs.
Загрузите свой ключ аутентификации APNs в Firebase. Если у вас еще нет ключа аутентификации APNs, обязательно создайте его в Центре разработчиков Apple .
В консоли Firebase внутри вашего проекта выберите значок шестеренки, затем выберите «Настройки проекта» и перейдите на вкладку «Облачные сообщения» .
В разделе «Ключ аутентификации APNs» в настройках приложения iOS нажмите кнопку «Загрузить» , чтобы загрузить ключ аутентификации для разработки, ключ аутентификации для производства или оба. Требуется как минимум один ключ.
Перейдите к месту, где вы сохранили свой ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Центре для разработчиков Apple ) и нажмите «Загрузить» .
Зарегистрируйтесь для получения удаленных уведомлений
Зарегистрируйте приложение для получения удаленных уведомлений либо при запуске, либо в желаемый момент работы приложения. Вызовите метод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];
Получите доступ к регистрационному токену.
По умолчанию SDK FCM генерирует регистрационный токен для экземпляра клиентского приложения при запуске приложения. Подобно токену устройства APNs, этот токен позволяет отправлять целевые уведомления любому конкретному экземпляру вашего приложения.
Подобно тому, как платформы Apple обычно предоставляют токен устройства APNs при запуске приложения, FCM предоставляет токен регистрации через метод messaging:didReceiveRegistrationToken: класса FIRMessagingDelegate . SDK FCM получает новый или существующий токен при первом запуске приложения, а также всякий раз, когда токен обновляется или становится недействительным. Во всех случаях 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 remote FCM registration token: \(error)") } else if let token = token { print("Remote instance ID token: \(token)") } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error fetching the remote FCM registration token: %@", error); } else { NSLog(@"Remote FCM registration token: %@", token); NSString* message = [NSString stringWithFormat:@"FCM registration token: %@", token]; // display message NSLog(@"%@", message); } }];
Этот метод можно использовать в любое время для доступа к токену вместо его сохранения.
Обновление токена монитора
Чтобы получать уведомления об обновлении токена, предоставьте делегат, соответствующий протоколу делегатов сообщений. В следующем примере регистрируется делегат и добавляется соответствующий метод делегата:
Быстрый
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("Firebase registration token: \(String(describing: fcmToken))") // 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 всегда содержит текущее значение токена.
Функция переадресации запросов отключена: сопоставление токена APNs и регистрационного токена.
Если вы отключили подмену методов или разрабатываете приложение 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 вы можете получить к нему доступ и отслеживать события обновления, используя те же методы, что и при включенной функции переадресации транзакций (swizzling).
Предотвратить автоматическую инициализацию
При генерации регистрационного токена FCM библиотека загружает идентификатор и данные конфигурации в Firebase. Если вы хотите сначала получить явное согласие пользователей, вы можете предотвратить генерацию токена во время настройки, отключив FCM. Для этого добавьте значение метаданных в ваш Info.plist (не в ваш GoogleService-Info.plist ):
FirebaseMessagingAutoInitEnabled = NO
Для повторного включения FCM можно выполнить вызов во время выполнения:
Быстрый
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
После установки это значение сохраняется при перезапуске приложения.
Настройте расширение службы уведомлений.
Для отправки уведомлений с изображениями на устройства Apple необходимо добавить расширение службы уведомлений. Это расширение позволяет устройствам отображать изображения, содержащиеся в содержимом уведомления. Если вы не планируете отправлять изображения в уведомлениях, этот шаг можно пропустить.
Чтобы добавить расширение сервиса, выполните необходимые задачи настройки для изменения и отображения уведомлений в APN, а затем добавьте API-интерфейс вспомогательного средства расширения FCM в NotificationService.m . В частности, вместо завершения обратного вызова с помощью self.contentHandler(self.bestAttemptContent); завершите его с помощью FIRMessaging extensionHelper как показано ниже:
@interface NotificationService () <NSURLSessionDelegate>
@property(nonatomic) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property(nonatomic) UNMutableNotificationContent *bestAttemptContent;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// Modify the notification content here as you want
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
self.bestAttemptContent.title];
// Call FIRMessaging extension helper API.
[[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent
withContentHandler:contentHandler];
}
...
Отправить уведомление
- Установите и запустите приложение на целевом устройстве. На устройствах Apple примите запрос на разрешение получения удаленных уведомлений.
- Убедитесь, что приложение запущено в фоновом режиме на устройстве.
- В консоли Firebase откройте страницу «Сообщения» .
- Если это ваше первое сообщение, выберите «Создать свою первую кампанию» .
- Выберите сообщения Firebase Notification и нажмите «Создать» .
- В противном случае, на вкладке «Кампании» выберите «Новая кампания» , а затем «Уведомления» .
- Введите текст сообщения.
- В правой панели выберите пункт «Отправить тестовое сообщение» .
- В поле « Добавить регистрационный токен FCM введите свой регистрационный токен.
- Выберите тест .
После выбора пункта «Тест» целевое клиентское устройство, на котором приложение работает в фоновом режиме, должно получить уведомление.
Для получения информации о доставке сообщений в ваше приложение, ознакомьтесь с панелью отчетов FCM , которая регистрирует количество отправленных и открытых сообщений на устройствах Apple и Android.
Следующие шаги
После завершения этапов настройки, вот несколько вариантов для дальнейшей работы с FCM для платформ Apple:
- Отправляйте сообщения на устройства
- Получайте сообщения в приложении Apple.
- Отправляйте сообщения по темам