有关IOS 10的Firebase FCM的说明

时间:2019-05-21 17:38:05

标签: ios swift firebase firebase-cloud-messaging

有没有人可以使用IOS目标> = 10的Swift 4.2阐明FCM所需的方法 简化: 1)没有直接的“数据”消息……。仅通过APNS通知/提醒信息 2)即使某些教程(没有说明原因)告诉我将其关闭,我仍将启用Swizzling

我发现IOS过时问题和FCM方面的一些文档遗漏使这种方式比需要的更加混乱。

我们能否得到一个简单的矩阵,如: AppState |关闭背景|前景|

userAction: 无(简单消息到达IOS) 撤消通知 点击通知 选择通知动作 直接打开应用-无需参与通知

在上述情况下调用的

方法是: 等等...

而且,无论APNS是否发送了令牌,FCM似乎都创建了自己的令牌;因此,我需要不同的逻辑来检测用户是否已授予权限,然后服务器才能假定FCM令牌将完全起作用……我想我只是不会确定FNS令牌是否会发送到服务器,除非我还确定我有一个APNS令牌…。 ???

此外,FCM文档还明确指出,通过APNS / Apple传递了用户可见的有效负载(即警报/通知样式)。

因此,我认为我可以假设直到Apple向我发送APNS令牌后FCM消息才会到达。

但是我似乎无法从FCM委托方法中读取或检索Apple令牌。

此代码始终为apns返回一个空字符串,因此我无法确定我的应用是否处于可靠状态:

@objc func消息传递(_消息传递:Messaging,didReceiveRegistrationToken fcmToken:字符串){         print(“ Firebase注册令牌:(fcmToken)”)         让apnsTokenData = messages.apnsToken         let apnsToken = apnsTokenData?.reduce(“”,{$ 0 + String(format:“%02X”,$ 1)})?? ”         print(“ apnsToken:(apnsToken)”)

感谢您的澄清!

1 个答案:

答案 0 :(得分:0)

以下是必须在具有Firebase的APNS中实现的功能

  • 注册推送通知
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
 UNUserNotificationCenter.current().requestAuthorization(
   options: authOptions,
   completionHandler: {_, _ in })
application.registerForRemoteNotifications()
  • 接收FCM令牌
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
}
  • 在后台状态下接收通知时: 如果您的应用程序在“后台”状态下已收到通知,则在单击该通知时会将该通知的内容传递给基础函数。
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.

}

  • 正在接收的应用程序处于前台状态时: 如果您的应用程序处于“前台”状态时已收到通知,则在单击该通知时会将该通知的内容传递给基础函数。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

}

问。尽管有些教程(没有说明原因)告诉我将其关闭,但我仍启用了Swizzling: A。方法Swizzling是将fcm令牌映射到apns令牌所必需的。如果您已关闭方法切换功能,则需要像以下代码一样将fcm令牌显式映射到apns令牌

  Messaging.messaging().apnsToken = deviceToken

问。我们可以得到一个简单的矩阵,例如:AppState |关闭背景|前景|: 对于任何应用程序状态,Appdelegate中都已经存在回调函数。

相关问题