1. Введение
Последнее обновление: 6 января 2020 г.
Firebase Cloud Messaging (FCM) — это кроссплатформенное решение для обмена сообщениями, которое позволяет надежно отправлять сообщения бесплатно.
Используя FCM, вы можете уведомить клиентское приложение о том, что новое электронное письмо или другие данные доступны для синхронизации. Вы можете отправлять уведомления, чтобы стимулировать повторное вовлечение и удержание пользователей. В таких случаях использования, как обмен мгновенными сообщениями, сообщение может передавать в клиентское приложение полезную нагрузку размером до 4 КБ.
Как это работает?
Реализация FCM включает в себя два основных компонента для отправки и получения:
- Доверенная среда, такая как облачные функции для Firebase или сервер приложений, на которой можно создавать, нацеливать и отправлять сообщения.
- Клиентское приложение iOS, Android или веб-приложение (JavaScript), которое получает сообщения через соответствующую транспортную службу для конкретной платформы.
Обзор архитектуры FCM
FCM использует следующий набор компонентов, которые создают, транспортируют и получают сообщения:
- Инструменты для составления или построения запросов сообщений. Компоновщик уведомлений предоставляет возможность создания запросов на уведомления на основе графического интерфейса. Для полной автоматизации и поддержки всех типов сообщений вам необходимо создавать запросы сообщений в среде доверенного сервера, поддерживающей Firebase Admin SDK или протоколы сервера FCM. Этой средой могут быть облачные функции для Firebase, Google App Engine или ваш собственный сервер приложений.
- Серверная часть FCM, которая (помимо других функций) принимает запросы сообщений, выполняет разветвление сообщений по темам и генерирует метаданные сообщения, такие как идентификатор сообщения.
- Транспортный уровень уровня платформы, который направляет сообщение на целевое устройство, обрабатывает доставку сообщения и при необходимости применяет конфигурацию, специфичную для платформы. Этот транспортный уровень включает в себя:
- Транспортный уровень Android (ATL) для устройств Android с сервисами Google Play
- Служба push-уведомлений Apple (APN) для устройств 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 в разделе «Язык» .
- Нажмите Далее .
Идентификатор пакета понадобится вам, когда вы создадите ключ APN и зарегистрируете свое приложение в проекте Firebase.
3. Настройка APN
Создайте ключ аутентификации
В этом разделе описывается, как создать ключ аутентификации для идентификатора приложения, включенного для push-уведомлений. Если у вас есть существующий ключ, вы можете использовать его вместо создания нового.
Чтобы создать ключ аутентификации:
- В своей учетной записи разработчика перейдите в раздел «Сертификаты, идентификаторы и профили» и выберите «Ключи» .
- Нажмите кнопку «Добавить» (+) в правом верхнем углу.
- Введите описание ключа аутентификации APN.
- В разделе «Службы ключей» установите флажок «APN» и нажмите « Продолжить» .
- Нажмите «Зарегистрироваться» , а затем «Загрузить» . Сохраните ключ в надежном месте. Это одноразовая загрузка, и ключ нельзя получить позже.
Создайте идентификатор приложения
Идентификатор приложения — это идентификатор, который однозначно идентифицирует приложение. Условно он представлен перевернутым доменом.
- Перейдите в Центр разработчиков Apple и войдите в систему.
- Перейдите к Сертификаты, идентификаторы и профили .
- Перейдите к Идентификаторам .
- Нажмите кнопку + , чтобы создать новый идентификатор приложения.
- Выберите переключатель «Идентификаторы приложений» и нажмите « Продолжить» .
- Выберите «Приложение» и нажмите « Продолжить» .
- Чтобы создать новый идентификатор приложения:
- Введите имя для вашего идентификатора приложения.
- Введите идентификатор команды . Это значение должно совпадать с идентификатором команды на вкладке «Членство».
- В разделе «Суффикс идентификатора приложения» выберите «Явный идентификатор приложения» , затем введите идентификатор пакета .
- В разделе «Службы приложений» убедитесь, что установлен флажок «Push-уведомления» .
- Нажмите «Продолжить» и проверьте правильность введенных данных:
- Значение идентификатора должно соответствовать объединению значений идентификатора команды и идентификатора пакета.
- Push-уведомления должны быть настраиваемыми
- Нажмите «Зарегистрировать» , чтобы создать идентификатор приложения.
Создать профиль
Чтобы протестировать приложение, пока оно находится в стадии разработки, вам понадобится профиль для разработки, который позволит вашим устройствам запускать приложение, которое еще не опубликовано в App Store.
- Перейдите в Центр разработчиков Apple и войдите в систему.
- Перейдите к Сертификаты, идентификаторы и профили .
- В раскрывающемся меню в левом верхнем углу выберите iOS, tvOS, watchOS, если он еще не выбран, затем перейдите к «Профили» .
- Нажмите кнопку + , чтобы создать новый профиль.
- Выберите «Разработка приложений iOS» в качестве типа профиля подготовки, затем нажмите «Продолжить» .
- В раскрывающемся меню выберите идентификатор приложения, которое вы хотите использовать, затем нажмите «Продолжить» .
- Выберите сертификат разработки iOS для идентификатора приложения, выбранного на предыдущем шаге, затем нажмите «Продолжить» .
- Выберите устройства iOS, которые вы хотите включить в профиль обеспечения, затем нажмите «Продолжить» . Обязательно выберите все устройства, которые вы хотите использовать для тестирования.
- Введите имя для этого профиля обеспечения (например, MessagingExampleProfile ), затем нажмите «Создать» .
- Нажмите «Загрузить» , чтобы сохранить профиль обеспечения на своем Mac.
- Дважды щелкните файл профиля обеспечения, чтобы установить его.
4. Добавление Firebase в ваш проект iOS
Создать проект Firebase
Прежде чем вы сможете добавить Firebase в свое приложение iOS, вам необходимо создать проект Firebase для подключения к вашему приложению iOS. Посетите раздел «Понимание проектов Firebase» , чтобы узнать больше о проектах Firebase.
- В консоли Firebase нажмите «Добавить проект» , затем выберите или введите имя проекта .
Если у вас есть существующий проект Google Cloud Platform (GCP), вы можете выбрать проект из раскрывающегося меню, чтобы добавить ресурсы Firebase в этот проект.
- (Необязательно) Если вы создаете новый проект, вы можете изменить его идентификатор .
Firebase автоматически присваивает уникальный идентификатор вашему проекту Firebase. Посетите раздел «Понимание проектов Firebase», чтобы узнать, как Firebase использует идентификатор проекта.
- Нажмите Продолжить .
- Настройте Google Analytics для своего проекта, что позволит вам оптимально использовать любой из следующих продуктов Firebase:
- Firebase Крашлитикс
- Прогнозы Firebase
- Облачный обмен сообщениями Firebase
- Обмен сообщениями Firebase внутри приложения
- Удаленная конфигурация Firebase
- A/B-тестирование Firebase
При появлении запроса выберите использовать существующую учетную запись Google Analytics или создать новую учетную запись. Если вы решите создать новую учетную запись, выберите местоположение отчетности 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
.
Закройте Хкод.
Добавьте Firebase SDK в свое приложение
Мы рекомендуем использовать CocoaPods для установки библиотек Firebase. Однако, если вы предпочитаете не использовать CocoaPods, вы можете напрямую интегрировать платформы SDK или использовать бета-версию Swift Package Manager.
- Создайте подфайл, если у вас его еще нет. Если вы используете пример быстрого запуска, проект Xcode и Podfile (с модулями) уже присутствуют.
$ cd MessagingExample $ pod init
- В свой подфайл добавьте модули 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
Загрузите ключ аутентификации APN в Firebase.
- Внутри вашего проекта в консоли Firebase выберите значок шестеренки, выберите «Настройки проекта» , а затем выберите вкладку «Облачные сообщения» .
- В разделе «Ключ аутентификации APN» в разделе «Конфигурация приложения iOS» нажмите кнопку «Загрузить» .
- Перейдите в папку, в которой вы сохранили ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в разделе «Сертификаты, идентификаторы и профили» Центра разработчиков 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 есть еще много функций и конфигураций, таких как подписка на темы.
Если они вам интересны, ознакомьтесь с официальным документом разработчика .
Что дальше?
Ознакомьтесь с некоторыми из этих лабораторий кода.