Catch up on everything we announced at this year's Firebase Summit. Learn more

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

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

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

Чтобы включить отправку push-уведомлений через APN, вам необходимо:

  • Ключ аутентификации Apple Push Notification для вашей учетной записи Apple Developer. Firebase Cloud Messaging использует этот токен для отправки push-уведомлений в приложение, идентифицированное идентификатором приложения.

  • Аутентификационный профиль для этого App ID с уведомлениями кнопочных включена . Кроме того, чтобы протестировать ваше приложение во время разработки, вам понадобится профиль подготовки для разработки, чтобы разрешить вашим устройствам запускать приложение, которое еще не опубликовано в App Store.

Вы создаете как в компании Apple Developer Center член .

Использование методов в Firebase Cloud Messaging

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

Добавьте Firebase в свой проект Apple

В этом разделе описаны задачи, которые вы, возможно, выполнили, если вы уже включили другие функции Firebase для своего приложения. Для ТСМ в частности, вам необходимо загрузить ключ аутентификации APNs и зарегистрировать для удаленных уведомлений .

Предпосылки

  • Установите следующее:

    • Xcode 12.5 или новее
  • Убедитесь, что ваш проект соответствует этим требованиям:

    • Ваш проект должен быть нацелен на эти версии платформы или более поздние версии:
      • iOS 10
      • macOS 10.12
      • tvOS 12
      • watchOS 6
  • Настройка физического устройства Apple , чтобы запустить приложение и выполнить следующие задачи:

    • Получить Push Notification Apple , Authentication Key для вашего счета компании Apple Developer .
    • Включить Push - уведомления в XCode под App> Возможности.

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

Создать проект Firebase

Прежде чем вы сможете добавить Firebase в свое приложение Apple, вам необходимо создать проект Firebase для подключения к вашему приложению. Визит Понимать Firebase Проекты более узнать о проектах Firebase.

Зарегистрируйте свое приложение в Firebase

Создав проект Firebase, вы можете добавить в него свое приложение Apple.

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

  1. Перейти к консоли Firebase .

  2. В центре главной страницы проекта, нажмите на значок IOS + , чтобы запустить рабочий процесс установки.

    Если вы уже добавили приложение к вашему проекту Firebase, нажмите кнопку Добавить приложение , чтобы отобразить параметры платформы.

  3. Введите расслоение идентификатор приложения в расслоении ID поля.

  4. (Необязательно) Введите другую информацию приложение: App ник и App Store ID.

  5. Выберите Зарегистрировать приложение.

Добавьте файл конфигурации Firebase

  1. Нажмите кнопку Загрузить GoogleService-info.plist , чтобы получить ваши Firebase яблочного платформ конфигурационный файл ( GoogleService-Info.plist ).

  2. Переместите файл конфигурации в корень вашего проекта Xcode. При появлении запроса выберите добавление файла конфигурации ко всем целям.

Если у вас есть несколько идентификаторов в пачке вашего проекта, вы должны связать каждый пучок ID с зарегистрированным приложением в консоли Firebase так , что каждое приложение может иметь свой собственный GoogleService-Info.plist файл.

Добавьте SDK Firebase в свое приложение

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. В Xcode, с приложением проекта открыто, перейдите в меню Файл> Swift пакеты> Добавить пакет Завис.
  2. При появлении запроса добавьте репозиторий Firebase Apple Platform SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Выберите библиотеку Firebase Cloud Messaging.
  5. Для оптимальной работы с Firebase Cloud Messaging, мы рекомендуем позволяет Google Analytics в проекте Firebase и добавление Firebase SDK для Google Analytics для вашего приложения. Вы можете выбрать библиотеку без коллекции IDFA или с коллекцией IDFA.
  6. По завершении Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.

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

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

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

  2. В APNs ключа аутентификации при конфигурации приложения IOS, нажмите на кнопку Загрузить.

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

Инициализируйте Firebase в своем приложении

Вам нужно будет добавить в приложение код инициализации Firebase. Импортируйте модуль Firebase и настройте общий экземпляр, как показано:

  1. Импорт модуля Firebase в вашем UIApplicationDelegate :

    Быстрый

    import Firebase

    Цель-C

    @import Firebase;
  2. Настройте FirebaseApp общей экземпляр, как правило , в вашем приложении application:didFinishLaunchingWithOptions: метод:

    Быстрый

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Цель-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

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

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

Быстрый

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: { _, _ in }
  )
} else {
  let settings: UIUserNotificationSettings =
    UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Цель-C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

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

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

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

Токен регистрации может измениться, когда:

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

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

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

Быстрый

Messaging.messaging().delegate = self

Цель-C

[FIRMessaging messaging].delegate = self;

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

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

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

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

Быстрый

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 , а не поставлять метод делегата. Свойство токена всегда имеет текущее значение токена.

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

Если вы отключили переключение методов, вам необходимо явно сопоставить свой токен APN с токеном регистрации FCM. Переопределить методы didRegisterForRemoteNotificationsWithDeviceToken для извлечения APNs фишки, а затем установить FIRMessaging «s APNSToken свойства:

Быстрый

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, вы готовы добавить в свое приложение обработку сообщений и другое, более продвинутое поведение. См. Эти руководства для получения дополнительной информации: