继续我们在Firebase上的系列文章,在本文中,我们将介绍Firebase Cloud Messaging (简称FCM),即Google针对移动应用程序的低延迟消息和通知编排服务。

只要iPhone一直存在,推送通知就在重要事件的预定时间通知用户(无论是Skype消息或呼叫的通知,Twitter上的直接消息还是游戏警报)中发挥了至关重要的作用。 通过精心设计的分段推送通知,营销人员提高了应用程序的参与度和用户保留率。 您可以通过利用FCM来执行以下操作:

  • 利用受众特征和用户行为来定位预定义或自定义用户细分
  • 传递即时或计划的推送通知
  • 将FCM集成到Google Analytics(分析)中,以提供详细的会话监控并进行A / B测试
  • 创建一个完全沉浸式即时消息传递应用程序

假设知识

本教程假定您具有iOS和Swift的工作知识,并且具有一些CocoaPods的基本经验。 如果您需要了解更多信息,请查看我们的Swift教程和CocoaPods教程 。

本文目的

在本文中,您将学习有关FCM的全部知识,因为我们将介绍以下主题:

  • 建立FCM项目
  • 为FCM配置环境
  • 接收和处理消息
  • 向您的设备发送消息
  • 主题和组消息
  • 定位细分和分析

什么是Firebase云消息传递(FCM)?

简而言之,Firebase Cloud Messaging(简称FCM)是Google的跨平台云消息传递和通知解决方案,使开发人员可以通过Firebase Notification Composer或一组Firebase暴露的API向其应用的最终用户发送推送通知。 。 FCM支持两种类型的消息:通知消息和数据消息。

Firebase徽标

通知消息是显示在用户设备上的显式推送通知消息,用于通知或请求参与,例如Facebook Messenger消息通知。 相反,数据消息由应用程序在后台直接处理,并且可用于更新表视图,而无需将应用程序放在前台。

通过消息定向,FCM可以将消息传递到单个设备,设备组或订阅主题的设备。 目标群体直接与Firebase Analytics集成,因此您可以跟踪参与度和转化,精心设计目标客户群。 接下来,我们将完成为iOS设置Firebase项目的过程。

设置项目

在本系列中,我们将构建一个简单的应用程序,除了触发和接收来自FCM的消息外,不会做太多事情。 让我们从GitHub克隆项目开始:

$ git@github.com:doronkatz/get-started-with-fcm-for-ios.git
...
$ git fetch --all --tags
...
$ git checkout tags/START

在根目录中打开Podfile ,您会注意到我们已经导入了必要的Firebase模块:

# 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:

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()初始化项目:

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配置环境

FCM利用Apple推送通知服务(APN)来发送和接收消息,因此我们需要通过APN启用推送通知。 首先,在Apple Developer Portal中 ,创建一个身份验证密钥。

创建一个APNs身份验证密钥

首先,转到证书 > 标识符和配置文件 ,然后在密钥下选择全部 :

在Apple Developer Portal中创建一个新密钥

现在,为APNs Auth Key输入密钥说明,确保您选择了Apple Push Notifications服务 (APN)。 将此密钥存储在安全的地方,因为这是一次性下载。

接下来,您需要创建一个应用程序ID,以便可以识别您的应用程序。 从导航菜单中选择标识符 > 应用程序ID ,然后单击+按钮添加新的iOS应用程序ID。 输入应用程序的描述和应用程序ID后缀,以匹配Xcode项目中的内容。 确保您还在服务复选框中选择了“ 推送通知 ”。

在开发人员门户中注册应用程序ID

回到Firebase面板 ,然后在“ 项目设置”下选择“ 云消息传递”选项卡。 在iOS应用配置中的“ APNS身份验证密钥”下,单击“ 上传”按钮。 现在,上传您从Apple Developer Portal下载的APNs身份验证密钥。

上载APN身份验证密钥

在应用程序中授权推送通知

在您的AppDelegate.swift中 ,添加以下代码:

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()请求用户对通知的许可。

除了我们先前生成的APNs令牌外,FCM还生成了一个令牌,该令牌用于通过messaging:didReceiveRegistrationToken:定位特定的设备应用程序实例。 这是在应用程序启动期间检索的,并且令牌在过期或以某种方式无效时都会更新。

仍在我们的AppDelegate.swift文件中,在FirebaseApp.configure()声明下面添加以下内容:

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:检索的,并在应用启动之初被调用一次,并将结果发送到应用服务器。 将以下内容添加到didFinishLaunchingWithOptions:方法的底部:

//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
    }

我们需要在发送消息之前明确要求用户接受推送通知。 requestAuthorization(options: authOptions)方法就是这样做的。 当令牌确实刷新后,您的应用将通过以下消息传递委托方法得到通知:

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前台接收消息,以绕过我们的APNs代理。 接下来,我们将处理推式通知。

接收和处理邮件

要接收通知,我们需要注册通知。 当您的应用程序处于后台模式时,您的通知将传递到系统托盘,直到您的应用程序打开为止,此时通知包将传递至AppDelegate中的AppDelegate didReceiveRemoteNotification:回调。 让我们接下来实现它:

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)")
    }

测试已收到Firebase注册令牌

生成并运行您的应用程序,确保您在物理设备上运行该应用程序,因为您无法在模拟器上收到推送通知。 目前,该应用程序在视觉上没有任何作用,但是如果您注意到Xcode控制台,您应该会看到您已成功收到Firebase注册令牌ID:

控制台确认Firebase注册令牌ID

现在,我们准备进入最后一步,将消息发送到我们的应用程序。

向您的设备发送消息

在上一步中,我们应该成功运行我们的应用程序,而控制台中未报告任何错误。 再次滑动并进入主屏幕,以再次在Xcode中构建并运行您的应用程序,但要确保在Xcode运行过程仍在运行时您的应用程序处于后台运行。

我们将使用Firebase的Notifications composer创建一条消息,因此请在您的浏览器中浏览并输入一些示例文本。 确保为消息目标选择单个设备。

使用Notifications Composer撰写邮件

您会在整个撰写邮件向导中注意到,您还可以定位其他细分受众群,甚至可以安排邮件在将来的某个日期发布。 对于本练习,我们现在将发送一条消息。 按发布发送您的消息。 瞥一眼您的手机,您应该会看到消息出现。

推送通知出现在您的设备上

主题和组消息

在本教程中,您学习了如何使用FCM接收推送通知,但是我们只是从头开始了解使用FCM可以做的事情。 在我们的示例中,我们以单个设备为目标,但是您很可能以订阅特定组或关注特定主题的 设备为目标。

主题消息使您可以让用户订阅特定主题,例如您最喜欢的大学团队的实时比分或用户特定感兴趣位置的天气更新。 用户可以通过FCM优化消息以提高吞吐量而不是延迟来订阅无限数量的主题。 有关使用主题消息的更多信息,请查阅Firebase文档的iOS主题消息部分。

如果您希望将每个用户的消息发送到多个设备,例如用户的iPhone和iPad,则设备组消息传递会更合适。 使用设备组消息传递,您可以将一条消息发送到在属于某个组的设备上运行的应用程序的多个实例,其中,该组通常意味着具有一组相关设备的单个用户,共享一个公共FCM通知密钥。 有关更多信息,请参阅Firebase文档的“ iOS上的设备组消息传递”部分。

对于任何一种消息传递,都可以使用Firebase的Admin SDK来采用一种更为自动化和复杂的消息触发形式,而不是使用Notifications作曲器 。

目标细分和分析

除了将消息发送到主题和组之外,您还可以根据各种其他营销属性仔细定位用户群。 也就是说,您可以使用FCM进行A / B或其他类型的实验,以使您能够评估和检验假设并观察关键参与度指标。

A / B测试与FCM一起使用,因此您可以测试不同的营销消息,而与远程配置一起使用,则可以测试应用程序中的更改。 ( Firebase )

有关更多信息,请参阅Firebase A / B测试上的Firebase文档。

您可以通过从我们的GitHub帐户克隆Firebase iOS推送通知演示应用程序仓库来下载该项目的完整源代码。

结论

在本教程中,您了解了Firebase Cloud Messaging,以及如何通过使用推送通知来吸引用户并增加保留率,轻松地将iOS应用提升到一个新的水平。

FCM不仅为您的应用提供了与其用户进行通信的方式,还为您提供了一种引人注目的方式,使您可以采用成熟的营销策略,根据您可以使用的各种算法,在正确的时间向正确的用户发送消息。 。 FCM非常容易实现,但是它提供了市场上无法比拟的复杂性和可扩展性。

翻译自: https://code.tutsplus.com/tutorials/get-started-with-firebase-messaging-for-ios--cms-32126

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐