1. Введение
Последнее обновление: 6 января 2020 г.
Firebase Cloud Messaging (FCM) — кроссплатформенное решение для обмена сообщениями, позволяющее надежно отправлять сообщения бесплатно.
Используя FCM, вы можете уведомить клиентское приложение о наличии нового электронного письма или других данных для синхронизации. Вы можете отправлять уведомления, чтобы стимулировать повторное вовлечение и удержание пользователей. В таких случаях, как обмен мгновенными сообщениями, сообщение может передавать клиентскому приложению полезную нагрузку объемом до 4 КБ.
Как это работает?
Реализация FCM включает два основных компонента для отправки и получения:
- Доверенная среда, например Cloud Functions for Firebase или сервер приложений, на котором можно создавать, нацеливать и отправлять сообщения.
- Клиентское приложение для iOS, Android или веб-приложение (JavaScript), которое получает сообщения через соответствующую платформенно-зависимую транспортную службу.
Архитектурный обзор FCM
FCM использует следующий набор компонентов, которые создают, передают и получают сообщения:
- Инструменты для создания и формирования запросов на уведомления. Компоновщик уведомлений предоставляет графический интерфейс для создания запросов на уведомления. Для полной автоматизации и поддержки всех типов сообщений необходимо создавать запросы в доверенной серверной среде, поддерживающей Firebase Admin SDK или протоколы сервера FCM. Этой средой может быть Cloud Functions for Firebase, Google App Engine или ваш собственный сервер приложений.
- Бэкэнд FCM, который (помимо прочих функций) принимает запросы сообщений, осуществляет разветвление сообщений по темам и генерирует метаданные сообщений, такие как идентификатор сообщения.
- Транспортный уровень уровня платформы, который направляет сообщение целевому устройству, управляет доставкой сообщения и при необходимости применяет конфигурацию, специфичную для платформы. Этот транспортный уровень включает в себя:
- Транспортный уровень Android (ATL) для устройств Android с сервисами Google Play
- Служба push-уведомлений Apple (APNs) для устройств iOS
- Протокол Web Push для веб-приложений
- FCM SDK на устройстве пользователя, где уведомление отображается или сообщение обрабатывается в соответствии с состоянием приложения (в приоритетном/фоновом режиме) и любой соответствующей логикой приложения.
Что вы построите
В этой лабораторной работе вы добавите push-уведомления в пример приложения iOS с помощью FCM.
Чему вы научитесь
- Как подписать и отписать пользователя на push-уведомления
- Как обрабатывать входящие push-сообщения
- Как отобразить уведомление
- Как реагировать на клики по уведомлениям
Что вам понадобится
- Xcode 11.0 или более поздняя версия
- CocoaPods 1.9.0 или более поздняя версия
- Аккаунт разработчика Apple
- Физическое устройство iOS для запуска вашего приложения
- Базовые знания Swift
2. Подготовка
Загрузите пример кода
В этой лабораторной работе вы создадите собственное тестовое приложение, но если вы хотите увидеть и запустить существующий пример приложения, вы можете загрузить пример кода для быстрого старта.
Образец можно получить двумя способами:
- Клонируйте репозиторий Git:
$ git clone https://github.com/firebase/quickstart-ios.git
- Загрузите ZIP-файл:
Если вы загрузите исходный код в виде ZIP-файла, распаковка даст вам корневую папку quickstart-ios
.
Создать новое приложение
Создайте собственное тестовое приложение, выполнив следующие шаги (ниже приведены шаги для XCode 12.3):
- Откройте XCode и выберите Создать новый проект Xcode .
- Выберите Приложение и нажмите Далее .
- Введите название продукта (например, MessagingExample)
- Выберите команду (если вы еще не создали команду, настройте ее в учетной записи разработчика Apple).
- Введите идентификатор организации (например,
com.
your-name
) - Введите идентификатор пакета (например,
com.
your-name
.MessagingExample
, он должен быть уникальным среди всех приложений iOS). - В раскрывающемся списке Интерфейс выберите Раскадровка .
- В раскрывающемся списке «Жизненный цикл» выберите «Делегат приложения UIKit» .
- В разделе «Язык» выберите Swift .
- Нажмите кнопку «Далее» .
Bundle Identifier вам понадобится при создании ключа APN и регистрации вашего приложения в проекте Firebase.
3. Настройка APN
Создайте ключ аутентификации
В этом разделе описывается, как сгенерировать ключ аутентификации для идентификатора приложения, поддерживающего push-уведомления. Если у вас есть существующий ключ, вы можете использовать его вместо генерации нового.
Чтобы создать ключ аутентификации:
- В своей учетной записи разработчика перейдите в раздел Сертификаты, идентификаторы и профили , а затем в раздел Ключи .
- Нажмите кнопку «Добавить» (+) в правом верхнем углу.
- Введите описание ключа авторизации APNs.
- В разделе «Ключевые службы» установите флажок APNs и нажмите «Продолжить» .
- Нажмите «Зарегистрироваться» , а затем «Скачать» . Сохраните ключ в надёжном месте. Загрузка производится один раз, и восстановить ключ позже будет невозможно.
Создать идентификатор приложения
Идентификатор приложения — это уникальный идентификатор приложения. Обычно он представлен в виде обратного домена.
- Перейдите в Центр разработчиков Apple и войдите в систему.
- Перейдите в раздел Сертификаты, идентификаторы и профили .
- Перейдите в раздел Идентификаторы .
- Нажмите кнопку + , чтобы создать новый идентификатор приложения.
- Выберите переключатель «Идентификаторы приложений» и нажмите «Продолжить» .
- Выберите Приложение и нажмите Продолжить .
- Чтобы создать новый идентификатор приложения:
- Введите имя для идентификатора вашего приложения.
- Введите идентификатор команды . Это значение должно совпадать с идентификатором команды на вкладке «Членство».
- В разделе «Суффикс идентификатора приложения» выберите «Явный идентификатор приложения» , затем введите свой идентификатор пакета .
- В разделе «Службы приложений» убедитесь, что установлен флажок «Push-уведомления» .
- Нажмите «Продолжить» и проверьте правильность введенных данных:
- Значение идентификатора должно соответствовать конкатенации значений идентификатора команды и идентификатора пакета.
- Push-уведомления должны быть настраиваемыми
- Нажмите «Зарегистрироваться» , чтобы создать идентификатор приложения.
Создать профиль
Чтобы протестировать приложение на этапе разработки, вам понадобится профиль для разработки, чтобы разрешить вашим устройствам запускать приложение, которое еще не опубликовано в App Store.
- Перейдите в Центр разработчиков Apple и войдите в систему.
- Перейдите в раздел Сертификаты, идентификаторы и профили .
- В раскрывающемся меню в левом верхнем углу выберите iOS, tvOS, watchOS, если этот вариант еще не выбран, затем перейдите в раздел Профили .
- Нажмите кнопку + , чтобы создать новый профиль.
- Выберите «Разработка приложений iOS» в качестве типа профиля подготовки, затем нажмите « Продолжить» .
- В раскрывающемся меню выберите идентификатор приложения, который вы хотите использовать, затем нажмите Продолжить .
- Выберите сертификат разработки iOS для идентификатора приложения, выбранного на предыдущем шаге, затем нажмите Продолжить .
- Выберите устройства iOS, которые вы хотите включить в профиль подготовки, затем нажмите «Продолжить» . Убедитесь, что выбраны все устройства, которые вы хотите использовать для тестирования.
- Введите имя для этого профиля подготовки (например, MessagingExampleProfile ), затем нажмите кнопку «Создать» .
- Нажмите «Загрузить» , чтобы сохранить профиль обеспечения на вашем Mac.
- Дважды щелкните файл профиля обеспечения, чтобы установить его.
4. Добавление Firebase в ваш iOS-проект
Создать проект Firebase
Прежде чем добавить Firebase в приложение iOS, необходимо создать проект Firebase для подключения к нему. Подробнее о проектах Firebase можно узнать в статье «Понимание проектов Firebase».
- В консоли Firebase нажмите Добавить проект , затем выберите или введите имя проекта .
Если у вас есть существующий проект Google Cloud Platform (GCP), вы можете выбрать проект из раскрывающегося меню, чтобы добавить в него ресурсы Firebase.
- (Необязательно) Если вы создаете новый проект, вы можете изменить идентификатор проекта .
Firebase автоматически присваивает вашему проекту уникальный идентификатор. Подробнее о том, как Firebase использует идентификатор проекта, читайте в статье «Понимание проектов Firebase».
- Нажмите «Продолжить» .
- Настройте Google Analytics для своего проекта, что позволит вам получить оптимальную работу с любым из следующих продуктов Firebase:
- Firebase Crashlytics
- Прогнозы Firebase
- Облачный обмен сообщениями Firebase
- Обмен сообщениями внутри приложения Firebase
- Удаленная настройка Firebase
- A/B-тестирование Firebase
При появлении запроса выберите использование существующего аккаунта Google Analytics или создание нового. Если вы решите создать новый аккаунт, выберите местоположение для отчётов Google Analytics, а затем примите настройки доступа к данным и условия использования Google Analytics для вашего проекта.
- Нажмите «Создать проект» (или «Добавить Firebase» , если вы используете существующий проект GCP).
Firebase автоматически выделяет ресурсы для вашего проекта Firebase. После завершения процесса вы будете перенаправлены на страницу обзора вашего проекта Firebase в консоли Firebase.
Зарегистрируйте свое приложение в Firebase
После создания проекта Firebase вы можете добавить в него свое приложение iOS.
Посетите раздел «Понимание проектов Firebase», чтобы узнать больше о передовых методах и рекомендациях по добавлению приложений в проект Firebase, в том числе о том, как обрабатывать несколько вариантов сборки.
- Перейдите в консоль Firebase.
- В центре страницы обзора проекта щелкните значок iOS , чтобы запустить рабочий процесс настройки.
Если вы уже добавили приложение в свой проект Firebase, нажмите «Добавить приложение», чтобы отобразить параметры платформы.
- Введите идентификатор пакета вашего приложения в поле «Идентификатор пакета iOS» .
- (Необязательно) Введите другую информацию о приложении: псевдоним приложения и идентификатор App Store .
- Нажмите «Зарегистрировать приложение» .
Добавьте файл конфигурации Firebase
- Нажмите «Загрузить GoogleService-Info.plist» , чтобы получить файл конфигурации Firebase iOS (
GoogleService-Info.plist
). - Переместите файл конфигурации в корневой каталог проекта Xcode. При появлении запроса выберите добавление файла конфигурации во все целевые объекты.
Если в вашем проекте несколько идентификаторов пакетов, необходимо связать каждый идентификатор пакета с зарегистрированным приложением в консоли Firebase, чтобы каждое приложение могло иметь свой собственный файл GoogleService-Info.plist
.
Закройте XCode.
Добавьте Firebase SDK в свое приложение
Мы рекомендуем использовать CocoaPods для установки библиотек Firebase. Однако, если вы предпочитаете не использовать CocoaPods, вы можете напрямую интегрировать фреймворки SDK или использовать бета-версию Swift Package Manager.
- Создайте Podfile, если у вас его ещё нет. Если вы используете пример быстрого старта, проект Xcode и Podfile (с модулями) уже есть.
$ cd MessagingExample $ pod init
- Добавьте в Podfile модули Firebase, которые вы хотите использовать в своем приложении.
Вы можете добавить любой из поддерживаемых продуктов Firebase в свое приложение iOS.
В пример быстрого старта добавлены SDK Google Analytics и Firebase Cloud Messaging.
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics' # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
- Установите модули, затем откройте файл
.xcworkspace
, чтобы увидеть проект в Xcode:
$ pod install
- Откройте
MessagingExample.xcworkspace
и нажмите кнопку Далее в консоли Firebase.
Инициализируйте Firebase в вашем приложении
Вам потребуется добавить код инициализации Firebase в ваше приложение.
Импортируйте модуль Firebase и настройте общий экземпляр (в примере быстрого старта модуль Firebase уже импортирован).
- Импортируйте модуль Firebase в ваш
UIApplicationDelegate
:
AppDelegate.swift
import UIKit
import Firebase // Add this line
- Настройте общий экземпляр FirebaseApp, обычно в
application:didFinishLaunchingWithOptions:
вашего приложения:
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // Add this line
return true
}
- Нажмите «Далее» в консоли Firebase.
- Пакеты Firebase SDK будут добавлены в ваше приложение. Нажмите «Продолжить», чтобы перейти в консоль .
5. Настройка клиента FCM
Загрузите свой ключ аутентификации APNs
Загрузите свой ключ аутентификации APNs в Firebase.
- Внутри вашего проекта в консоли Firebase выберите значок шестеренки, выберите Настройки проекта , а затем выберите вкладку Облачные сообщения .
- В разделе «Ключ аутентификации APNs» в разделе «Конфигурация приложения Apple» нажмите кнопку «Загрузить» , чтобы загрузить ключ аутентификации разработки, ключ аутентификации производства или оба. Требуется как минимум один.
- Перейдите к месту сохранения ключа, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в разделе «Сертификаты, идентификаторы и профили» в Центре разработчиков Apple) и нажмите « Загрузить» .
Зарегистрируйтесь для получения удаленных уведомлений
Зарегистрируйте приложение для получения удаленных уведомлений либо при запуске, либо в нужной точке потока приложений.
В примере быстрого старта registerForRemoteNotifications
уже добавлен.
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
Назначьте свойство делегата UNUserNotificationCenter
, добавив эти строки в конец AppDelegate.swift.
AppDelegate.swift
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
// Print full message.
print(userInfo)
// Change this to your preferred presentation option
completionHandler([[.alert, .sound]])
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print full message.
print(userInfo)
completionHandler()
}
}
Установить делегата обмена сообщениями
Чтобы получать регистрационные токены, реализуйте протокол делегата обмена сообщениями и настройте свойство delegate
FIRMessaging
после вызова [FIRApp configure]
. Например, если ваш делегат приложения соответствует протоколу делегата обмена сообщениями, вы можете установить делегат в application:didFinishLaunchingWithOptions:
на самого себя (в примере быстрого старта он уже установлен).
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self // Add this line
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
Назначьте свойство делегата FIRMessaging
, добавив эти строки в конец AppDelegate.swift.
AppDelegate.swift
extension AppDelegate : MessagingDelegate {
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)
}
}
Добавить возможности
Вы добавили возможность push-уведомлений в разделе «Создание идентификатора приложения», но вам также необходимо добавить эту возможность в XCode, выполнив следующие шаги (нижеприведенные шаги относятся к XCode 12.3):
- Щелкните название проекта в области навигатора.
- Нажмите Подписание и возможности .
- Нажмите + Возможность .
- Дважды щелкните «Фоновые режимы» .
- Нажмите +Возможность еще раз.
- Дважды щелкните Push-уведомления .
- Проверьте Удаленные уведомления в разделах Фоновые режимы .
6. Отправить уведомление
Вы можете отправить тестовое сообщение, выполнив следующие действия:
- Установите и запустите приложение на целевом устройстве. Вам необходимо будет принять запрос на разрешение получать удалённые уведомления.
- Получите токен регистрации в журнале XCode.
- Убедитесь, что приложение работает в фоновом режиме на устройстве.
- Откройте редактор уведомлений и выберите Новое уведомление .
- Введите текст сообщения.
- Выберите Отправить тестовое сообщение .
- В поле Добавить регистрационный токен FCM введите регистрационный токен, полученный на шаге 2.
- Нажмите кнопку Тест .
После нажатия кнопки «Тест» целевое клиентское устройство (с приложением в фоновом режиме) должно получить уведомление в центре уведомлений.
Для получения информации о доставке сообщений в ваше приложение см. панель отчетности FCM , которая регистрирует количество отправленных и открытых сообщений на устройствах iOS и Android.
7. Поздравления
Поздравляем, вы успешно отправили тестовое сообщение!
В FCM есть еще множество функций и настроек, например, подписка на темы.
Если вас это интересует, ознакомьтесь с официальным документом разработчика .
Что дальше?
Ознакомьтесь с некоторыми из этих практикумов.