Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Настройка клиентского приложения Firebase Cloud Messaging на iOS

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

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

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

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

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

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

Предпосылки

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

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

    • Ваш проект должен быть нацелен на iOS 8 или новее.
  • Настройте физическое устройство iOS для запуска вашего приложения и выполните следующие задачи:

    • Получите ключ аутентификации Apple Push Notification для своей учетной записи Apple Developer .
    • Включите push-уведомления в XCode в разделе « Приложение»> «Возможности» .

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

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

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

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

После того, как у вас есть проект Firebase, вы можете добавить в него свое приложение для iOS.

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

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

  2. В центре страницы обзора проекта щелкните значок iOS ( ), чтобы запустить рабочий процесс настройки.

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

  3. Введите идентификатор пакета вашего приложения в поле идентификатора пакета iOS .

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

  5. Щелкните Зарегистрировать приложение .

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

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

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

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

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

Мы рекомендуем использовать CocoaPods для установки библиотек Firebase. Однако, если вы не хотите использовать CocoaPods, вы можете напрямую интегрировать фреймворки SDK .

Вы используете один из примеров быстрого запуска ? Проект Xcode и Podfile (с модулями) уже присутствуют, но вам все равно нужно добавить файл конфигурации Firebase и установить модули.

  1. Создайте подфайл, если у вас его еще нет:

    cd your-project-directory
    pod init
  2. В свой Podfile добавьте модули Firebase, которые вы хотите использовать в своем приложении.

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

    Для оптимальной работы с Firebase Cloud Messaging мы рекомендуем включить Google Analytics в вашем проекте. Кроме того, в рамках настройки Google Analytics вам необходимо добавить в приложение Firebase SDK для Analytics.

    Аналитика включена

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'

    Аналитика не включена

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Установите .xcworkspace , затем откройте файл .xcworkspace чтобы увидеть проект в Xcode:

    pod install
    open your-project.xcworkspace

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

Загрузите ключ аутентификации APN в Firebase. Если у вас еще нет ключа аутентификации APN, см. Раздел Настройка APN с помощью FCM .

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

  2. В ключе аутентификации APN в конфигурации приложения iOS нажмите кнопку « Загрузить» .

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

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

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

  1. Импортируйте модуль Firebase в свой UIApplicationDelegate :

    стриж

    import Firebase

    Objective-C

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

    стриж

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

    Objective-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()

Objective-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, этот токен позволяет отправлять целевые уведомления любому конкретному экземпляру вашего приложения.

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

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

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

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

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

стриж

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

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

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

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

Вы можете получить токен напрямую, используя instanceIDWithHandler:. Этот обратный вызов предоставляет InstanceIDResult , который содержит токен. Если получение InstanceID каким-либо образом не удалось получить, выдается ненулевая ошибка.

стриж

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

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

Мониторинг обновления токена

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

стриж

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(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 и токена регистрации

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

стриж

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

Objective-C

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

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

Импортировать существующие токены APN пользователей

Если у вас есть существующая база пользователей, которую вы хотите подключить к клиентскому приложению FCM, используйте API batchImport, предоставляемый идентификатором экземпляра. С помощью этого API вы можете массово импортировать существующие токены iOS APN в FCM, сопоставляя их с новыми действительными регистрационными токенами.

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

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

FirebaseMessagingAutoInitEnabled = NO

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

стриж

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

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

После того, как вы настроили свой клиент iOS, вы готовы добавить в свое приложение обработку сообщений и другое, более продвинутое поведение. См. Эти руководства для получения дополнительной информации: