didReceiveRemoteNotification未被调用,当应用程序被杀死时。

4

我有一个使用fcm实现的应用程序。在所有情况下,我都可以接收到推送通知,这很好。但是如果应用程序被用户终止/杀死,则不会调用didReceiveRemoteNotification方法。如果应用程序在后台或前台中,它将被调用。应用程序被终止时通知会出现,但didReceiveRemoteNotification:fetchCompletionHandler没有被调用。

我的问题是,当应用程序被终止并收到Firebase通知时,触发哪个方法。我使用了Swift 4.2和Xcode 10.0。我在功能中启用了背景模式-来自远程通知的通知。

使用Firebase,我发送了以下JSON:

{ 
 "to": "/topics/group1", 
 "priority" : "high",
 "content-available": true,
 "notification" : {
 "body" : "Yes you recevied !",
 "sound": "default",
 "title" : "Notification"
 },
 "data": {
"type" : "IOS"
    }
}

@Pushp 是的 已启用 - Gamsh
这是预期的行为。当用户终止应用程序时,您的应用程序无法接收推送通知。如果您的应用程序是VoIP应用程序,则可以使用PushKit,在推送发送时重新启动您的应用程序。 - Paulw11
2
当应用程序被杀死并收到通知时,didReceiveRemoteNotification:fetchCompletionHandler 永远不会被调用。相反,当用户点击通知时,数据将在 didFinishLaunchingWithOptions 中接收。 - NightFury
@NightFury 这意味着在应用程序终止时,如果收到通知,则没有任何方法可以处理它。 - Gamsh
1
@Gamsh,你解决了吗?我也遇到了类似的问题...当应用程序从“多任务”列表中删除时,该应用程序无法接收远程通知。 - SquareBox
显示剩余4条评论
2个回答

3
Apple文档中可以得知:
然而,如果用户强制退出了应用程序,系统不会自动启动它。在这种情况下,用户必须重新启动您的应用程序或重启设备,然后系统才会再次尝试自动启动您的应用程序。
实际上,您可以通过启用VoIP后台模式来解决这个问题,但这将减少您通过应用商店审核的机会。

1
我想在本地更新徽章编号。徽章编号不随通知一起发送。是否有办法在应用程序终止状态下更新它? - Gamsh

0
您的内容可用的键/值不正确。键是content_available(下划线,而非破折号),值是布尔值,而非字符串:
{ 
 "to": "/topics/group1", 
 "priority" : "high",
 "content_available": true,  // <= CHANGED
 "notification" : {
 "body" : "Yes you recevied !",
 "sound": "default",
 "title" : "Notification"
 },
 "data": {
 "type" : "IOS"
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接