iOS FCM仅数据消息不调用消息传递:didReceiveMessage

时间:2018-08-21 16:39:52

标签: firebase firebase-cloud-messaging

Firebase Messaging版本5.6.0。我正在尝试通过iOS 9.0上的Firebase Messaging handle a data only message in the foreground(如果需要,则为10),但未按文档调用FIRMessagingDelegate的{​​{1}}。我看到消息来自@ messaging:didReceiveMessage的{​​{1}},但从未传递给委托人。

这是云功能的片段,该片段按sending to a topic将数据发送到主题:

FIRMessaging.m

我错过了什么吗?

更新:如果我实现application:didReceiveRemoteNotification:userInfo,我确实会收到数据 fetchCompletionHandler:completionHandler。

1 个答案:

答案 0 :(得分:1)

感谢Kat在Firebase的支持,这就是答案。

使用旧式sendToTopic而不是send,因为send悄悄地添加了content_available=1,它被视为APN静默通知。这是更新的版本:

admin.messaging().sendToTopic('example', {
  data: {
    test: '123'
  }
});
// Always use strings for key/values in the data object.

在Firebase支持下来自 Kat的逐字记录

如何处理FCM data message取决于您对content_available的设置。

  • 如果您有content_available = 1,则通过APN发送消息,并且该消息与APNs silent notification类似。当应用在前台或后台运行(即未终止)时,它是application:didReceiveRemoteNotification:回调中的handled。有关更多信息,请参见this related StackOverflow post

  • 没有content_available,消息是通过FCM直接通道发送的。仅当应用程序处于前台时,才在messagings:didReceiveMessage:中处理此问题。

请注意,通过Admin SDK的send()方法发送的消息使用FCM HTTP v1 API,默认情况下,其content_available = 1,因此它们总是通过APN发送。如果要配置content_available字段,则需要使用Admin SDK的sendToDevice()方法,该方法使用legacy protocols

此外,这是legacy protocols的列表。