Статьи

Отправка push-уведомлений в приложение для iOS с помощью облачных сообщений Firebase

Продолжая нашу серию статей о Firebase , в этом посте мы рассмотрим Firebase Cloud Messaging — или для краткости FCM — Google с низким уровнем задержки и сервисом оркестровки уведомлений для мобильных приложений.

Пока iPhone существует, push-уведомления играют важную роль в уведомлении пользователей в заранее определенное время о важных событиях, будь то уведомление о сообщении Skype или звонке, прямое сообщение в Twitter или игровые оповещения. Посредством тщательно созданных сегментированных push-уведомлений маркетологи увеличили вовлеченность приложений и удержание пользователей. Вы можете сделать то же самое, используя FCM для:

  • целевые предопределенные или пользовательские сегменты пользователей, использующие преимущества демографии и поведения пользователей
  • доставлять немедленные или запланированные push-уведомления
  • интегрировать FCM в Google Analytics для подробного мониторинга разговоров и проведения A / B-тестирования
  • создать полностью погруженное приложение для обмена мгновенными сообщениями

В этом руководстве предполагается, что у вас есть практические знания по iOS и Swift, а также базовый опыт работы с CocoaPods. Если вам нужно узнать больше, ознакомьтесь с нашими учебниками Swift и CocoaPods .

В этой статье вы узнаете все о FCM, так как мы рассмотрим следующие темы:

  • настройка проекта FCM
  • настройка вашей среды для FCM
  • получение и обработка сообщений
  • отправив сообщение на ваше устройство
  • обмен сообщениями по темам и группам
  • таргетинг сегментов и аналитика

Вкратце, Firebase Cloud Messaging — или сокращенно FCM — это кроссплатформенное решение для обмена облачными сообщениями и уведомлениями от Google, позволяющее разработчикам отправлять push-уведомления конечным пользователям своих приложений через Firebase Notification Composer или через набор API, предоставляемый Firebase. , FCM поддерживает два типа сообщений: уведомления и сообщения с данными.

Логотип Firebase

Уведомительные сообщения — это явные push-уведомления, которые отображаются на устройстве пользователя для информирования или запроса на участие, такие как уведомление в сообщении Facebook Messenger. Сообщения с данными, напротив, непосредственно обрабатываются приложением в фоновом режиме и могут использоваться для обновления табличного представления без приложения на переднем плане.

Посредством нацеливания сообщений FCM может доставлять сообщения на отдельные устройства, группы устройств или устройства, подписанные на темы. Целевые группы напрямую интегрируются с Firebase Analytics, так что вы можете отслеживать вовлечение и конверсии, создавая целевые сегменты клиентов. Далее мы собираемся пройти процесс настройки проекта Firebase для iOS.

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

1
2
3
4
5
$ [email protected]:doronkatz/get-started-with-fcm-for-ios.git
$ git fetch —all —tags
$ git checkout tags/START

Открыв Podfile в корневом каталоге, вы заметили, что мы импортировали необходимые модули Firebase:

01
02
03
04
05
06
07
08
09
10
11
# Uncomment the next line to define a global platform for your project
platform :ios, ‘10.0’
 
target ‘Firebase-FCM’ do
  # Comment the next line if you’re not using Swift and don’t want to use dynamic frameworks
  use_frameworks!
 
  # Pods for Firebase-FCM
  pod ‘Firebase/Core’
  pod ‘Firebase/Messaging’
end

Введите следующее, чтобы построить стручки:

pod install

Откройте рабочее пространство Firebase-FCM.xcworkspace и в браузере перейдите на панель Firebase и создайте новый проект:

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

Затем нажмите « Добавить Firebase» в ваше приложение iOS , которое шаг за шагом проведет вас через процесс регистрации вашего приложения в Firebase.

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

В какой-то момент он просит вас добавить файл GoogleService-info.plist в ваш проект Xcode:

добавьте файл GoogleService-infoplist в ваш проект XCode

Вы уже добавили библиотеки через CocoaPods, поэтому вы можете пропустить оставшиеся инструкции и вернуться в консоль Firebase.

В Xcode откройте AppDelegate.swift, и вы увидите, что мы инициализировали проект, импортировав Firebase и добавив FirebaseApp.configure() :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
import UIKit
import Firebase
 
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
 
    *var* window: UIWindow?
 
 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        /// Override point for customization after application launch./
        FirebaseApp.configure()
        return true
    }
 

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

FCM использует службу Apple Push Notification (APN) для отправки и получения сообщений, поэтому нам нужно включить Push-уведомления через APN. Сначала на портале разработчиков Apple создайте ключ аутентификации.

Сначала перейдите в Сертификаты > Идентификаторы и профили и выберите Все под Ключами :

Создайте новый ключ в Apple Developer Portal

Теперь введите описание ключа для ключа аутентификации APN , убедившись, что вы выбрали сервис Apple Push Notifications (APNs). Храните этот ключ в надежном месте, так как это разовая загрузка.

Затем вам нужно создать идентификатор приложения, чтобы ваше приложение можно было идентифицировать. Выберите « Идентификаторы» > « Идентификаторы приложений» в меню навигации и нажмите кнопку « , чтобы добавить новый идентификатор приложения iOS. Введите описание и суффикс идентификатора приложения для вашего приложения в соответствии с тем, что есть в вашем проекте XCode. Убедитесь, что вы также выбрали Push-уведомления в поле службы.

Зарегистрируйте идентификатор приложения на портале разработчика

Вернитесь на панель Firebase и в разделе « Настройки проекта» выберите вкладку « Облачные сообщения ». В разделе « Ключ аутентификации APNs» в конфигурации приложения iOS нажмите кнопку « Загрузить» . Теперь загрузите ключ авторизации APN, который вы загрузили с портала разработчиков Apple .

Загрузить ключ авторизации APN

В вашем AppDelegate.swift добавьте следующий код:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import UserNotifications
 
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
 
    var window: UIWindow?
 
 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        /// Override point for customization after application launch.
        FirebaseApp.configure()
         
        UNUserNotificationCenter.current().delegate = self
         
        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
         
        UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { (_, error) in
            guard error == nil else{
                print(error!.localizedDescription)
                return
            }
        }
         
        application.registerForRemoteNotifications()
        return true
    }

Здесь мы импортируем UserNotifications , объявляем о нашем намерении реализовать UNUserNotificationCenterDelegate и запрашиваем разрешение пользователя на уведомления с помощью UNUserNotificationCenter.current().requestAuthorization() .

В дополнение к токену APN, который мы сгенерировали ранее, FCM также генерирует токен, который используется для нацеливания на определенные экземпляры приложения устройства через messaging:didReceiveRegistrationToken: Это извлекается во время запуска приложения, и токен обновляется всякий раз, когда он истекает или каким-то образом становится недействительным.

Еще в нашем файле AppDelegate.swift добавьте следующее ниже объявления FirebaseApp.configure() :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
class AppDelegate: UIResponder, UIApplicationDelegate {
 
    var window: UIWindow?
    let gcmMessageIDKey = «gcm.message_id»
     
 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        FirebaseApp.configure()
        Messaging.messaging().delegate = self
         
        UNUserNotificationCenter.current().delegate = self
        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]

Обратите внимание, что мы также добавили MessagingDelegate в наше объявление класса. messaging:didReceiveRegistrationToken: извлекаются с помощью messaging:didReceiveRegistrationToken: и вызываются один раз в начале запуска приложения, а результаты отправляются на сервер приложений. Добавьте следующее в didFinishLaunchingWithOptions: вашего didFinishLaunchingWithOptions: метода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
//Solicit permission from the user to receive notifications
       UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { (_, error) in
           guard error == nil else{
               print(error!.localizedDescription)
               return
           }
       }
        
       //get application instance ID
       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)»)
           }
       }
        
       application.registerForRemoteNotifications()
       return true
   }

Нам нужно явно попросить пользователя принять push-уведомления перед отправкой сообщений. Метод requestAuthorization(options: authOptions) делает именно это. Когда токен обновляется, ваше приложение получает уведомление с помощью следующего метода делегирования сообщений:

01
02
03
04
05
06
07
08
09
10
11
12
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
       if let messageID = userInfo[gcmMessageIDKey] {
           print(«Message ID: \(messageID)»)
       }
        
       // Print full message.
       print(userInfo)
   }
 
   func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
       print(«Unable to register for remote notifications: \(error.localizedDescription)»)
   }

Последний метод позволяет вам получать сообщения на переднем плане, напрямую от FCM, чтобы обойти наш прокси-сервер APN. Далее мы работаем над обработкой Push-уведомлений.

Чтобы получать уведомления, нам нужно зарегистрироваться для получения уведомлений. Когда ваше приложение находится в фоновом режиме, ваши уведомления доставляются в системный трей до тех пор, пока ваше приложение не откроется, после чего пакет уведомлений затем передается didReceiveRemoteNotification: в AppDelegate . Давайте реализуем это следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
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.
   }
    
   func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
       print(«Received data message: \(remoteMessage.appData)»)
   }

Создайте и запустите свое приложение, убедившись, что оно запущено на физическом устройстве, поскольку вы не можете получать push-уведомления на симуляторе. Прямо сейчас приложение ничего не делает визуально, но если вы обратите внимание на консоль Xcode, вы должны увидеть, что вы успешно получили идентификатор токена регистрации Firebase:

Консоль, подтверждающая идентификатор токена регистрации Firebase

Теперь мы готовы перейти к последнему этапу, отправляя сообщения в наше приложение.

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

Мы собираемся создать сообщение с помощью композитора уведомлений Firebase, поэтому зайдите туда в браузере и введите пример текста. Убедитесь, что вы выбрали одно устройство для своей цели сообщения.

Создать сообщение с уведомлением Composer

В мастере создания сообщений вы заметили, что вы также можете настроить таргетинг на другие сегменты и даже запланировать выход своего сообщения в будущем. Для этого упражнения мы собираемся отправить сообщение сейчас. Нажмите Опубликовать, чтобы отправить сообщение. Посмотрите на свой телефон, и вы должны увидеть ваше сообщение.

Push-уведомление появляется на вашем устройстве

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

Обмен сообщениями в темах позволяет пользователям подписываться на определенные темы, такие как результаты в реальном времени для вашей любимой команды колледжа или обновления погоды в конкретном месте интереса вашего пользователя. Пользователи могут подписаться на неограниченное количество тем с FCM, оптимизируя сообщения для пропускной способности, а не задержки. Для получения дополнительной информации о работе с тематическими сообщениями, пожалуйста, обратитесь к разделу « Обмен сообщениями по темам на iOS » в документации Firebase.

Если вы хотите отправлять сообщения на несколько устройств для каждого пользователя, таких как iPhone и iPad пользователя, более подходящим будет обмен сообщениями в группах устройств . Обмен сообщениями в группе устройств позволяет отправлять одно сообщение нескольким экземплярам приложения, работающего на устройствах, принадлежащих группе, где группа обычно означает одного пользователя с набором связанных устройств, совместно использующих общий ключ уведомления FCM. Подробнее об этом см. В разделе « Сообщения группы устройств на iOS » документации Firebase.

Для любого типа обмена сообщениями вместо использования Компоновщика уведомлений вы должны использовать более автоматизированную и сложную форму запуска сообщений с использованием Firebase Admin SDK .

Помимо отправки сообщений по темам и группам, вы также можете тщательно ориентировать сегменты пользователей на основе различных других маркетинговых свойств. То есть вы можете использовать FCM для проведения A / B или других типов экспериментов, чтобы вы могли оценивать и проверять гипотезы и наблюдать ключевые показатели взаимодействия.

A / B-тестирование работает с FCM, поэтому вы можете тестировать различные маркетинговые сообщения, а с помощью Remote Config — тестировать изменения в своем приложении. ( Firebase )

Для получения дополнительной информации обратитесь к документации Firebase по Firebase A / B Testing .

Вы можете скачать полный исходный код этого проекта, клонировав демо-приложение Firebase для iOS с push-уведомлениями из нашей учетной записи GitHub.

В этом учебном пособии вы узнали о Firebase Cloud Messaging и о том, как вы можете легко вывести свое приложение iOS на новый уровень, используя push-уведомления в качестве средства привлечения пользователей и увеличения срока хранения.

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