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。
答案 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的列表。