在Firebase Cloud Messaging中使用主题

时间:2018-12-04 02:53:08

标签: ios swift firebase-cloud-messaging

我正在设置Firebase Cloud Messaging以便将通知发送到iOS应用。 我希望能够向所有接受接收通知的用户发送通知。 在阅读和试验了很多之后,我的理解是(对于我的用例)我应该设置某种通用主题,然后将每个通知发送给该主题。 我的问题是:如何首先创建一个主题,然后如何在我的iOS Swift应用程序中注册(客户端)一个主题?

尽管我尝试浏览网络以获取有关该信息,但我发现的内容并不多。

有关信息,我正在使用Xcode版本10.1,iOS 12.1和Swift 4.2。

1 个答案:

答案 0 :(得分:2)

第1步:设置Firebase

如果您尚未将Firebase添加到您的项目中,请在此处进行全部记录: https://firebase.google.com/docs/ios/setup

您将需要开始配置Firebase。对于我的项目,我在应用程序启动时在AppDelegate中启动了配置。

class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        FirebaseApp.configure()
        Messaging.messaging().delegate = self
        ...
    }

    ...
}

第2步:请求授权

假设您已在Apple Developer Portal和Firebase Cloud Messaging设置上配置了所有APNs身份验证密钥/证书,

https://developer.apple.com/account/ios/certificate/ https://console.firebase.google.com/u/0/project/FIREBASE_PROJECT_NAME/settings/cloudmessaging/ios:APP_BUNDLE_ID

接下来,您将需要请求设备上的推送通知的授权。我已将其放置在项目的前几个UIViewController中。

class FirstViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {

        super.viewDidAppear(animated)

        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound], completionHandler: { (success, error) in

            guard success else { return }
            UIApplication.shared.registerForRemoteNotifications()
        })
    }
}

第3步:设备令牌

在步骤2中注册远程通知时:

UIApplication.shared.registerForRemoteNotifications()

您将需要在AppDelegate中实现此委托函数:

class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {

    ...

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
    }

    ...
}

请注意,收到的deviceToken在NSData中,而Firebase所需的apnsToken在String中。

第4步:主题订阅

还记得我们在步骤1中设置为AppDelegate的委托引用吗?

Messaging.messaging().delegate = self

您将需要实现其委托功能,以使应用知道Firebase确实已收到令牌,并且可以预订主题。

class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {

    ...

    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
        Messaging.messaging().subscribe(toTopic: "/topics/example")
    }

    ...
}

第5步:验证

检查您的应用是否已成功订阅主题的一种简单方法是通过Firebase控制台发送推送通知。

https://console.firebase.google.com/u/0/project/FIREBASE_PROJECT_NAME/notification