Отправить тестовое сообщение в фоновое приложение Apple

Чтобы начать работу с FCM, разработайте простейший вариант использования: отправка тестового сообщения уведомления из компоновщика уведомлений на устройство разработки, когда приложение находится в фоновом режиме на устройстве. На этой странице перечислены все шаги для достижения этой цели, от настройки до проверки — она может охватывать шаги, которые вы уже выполнили, если вы настроили клиентское приложение Apple для FCM.

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

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

Предпосылки

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

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

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

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

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

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

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

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

Чтобы использовать Firebase в своем приложении Apple, вам необходимо зарегистрировать свое приложение в проекте Firebase. Регистрация вашего приложения часто называется «добавлением» вашего приложения в ваш проект.

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

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

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

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

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

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

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

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

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

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

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

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

  1. В Xcode при открытом проекте приложения перейдите в File > Add Packages .
  2. При появлении запроса добавьте репозиторий SDK Firebase для платформ Apple:
  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

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

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

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

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

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

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

  1. Импортируйте модуль FirebaseCore в свой UIApplicationDelegate , а также любые другие модули Firebase, которые использует ваш делегат приложения. Например, чтобы использовать Cloud Firestore и аутентификацию:

    Быстрый

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Цель-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Настройте общий экземпляр FirebaseApp , как правило, в методе инициализатора App или делегата 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 обычно доставляют токен устройства 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 всегда имеет текущее значение токена.

Отправить уведомление

  1. Установите и запустите приложение на целевом устройстве. Вам нужно будет принять запрос на получение разрешения на получение удаленных уведомлений.

  2. Убедитесь, что приложение находится в фоновом режиме на устройстве.

  3. Откройте компоновщик уведомлений и выберите Новое уведомление .

  4. Введите текст сообщения.

  5. Выберите Отправить тестовое сообщение .

  6. В поле Добавить токен регистрации FCM введите токен регистрации, который вы получили в предыдущем разделе этого руководства.

  7. Нажмите Тест

После нажатия кнопки « Тест » целевое клиентское устройство (с приложением в фоновом режиме) должно получить уведомление в центре уведомлений.

Чтобы получить представление о доставке сообщений в ваше приложение, см. информационную панель отчетности FCM , которая записывает количество сообщений, отправленных и открытых на устройствах Apple и Android, а также данные о «показах» (уведомлениях, просмотренных пользователями) для приложений Android.

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

Чтобы выйти за рамки уведомлений и добавить другое, более продвинутое поведение в ваше приложение, см.: