首页 > 解决方案 > 推送通知有时会调用 didFinishLaunchingWithOptions 而不是 didReceiveRemoteNotification

问题描述

我有一个在 iOS 13 上运行的应用程序,它接收包含警报消息和内容可用的推送通知(以允许后台下载内容)。但我注意到一个问题,即永远不允许启动某些后台下载。

查看我的日志,我可以看到大部分时间application(_:didReceiveRemoteNotification:fetchCompletionHandler:)都按预期调用并开始下载。

但有时(即使在没有使用电话的午夜)它会选择application(_:didFinishLaunchingWithOptions:)使用推送有效负载进行呼叫。在这种情况下didReceiveRemoteNotification根本不调用。

以下是我的问题:

  1. 这是预期的行为吗?该文档有点含糊,但听起来在每种情况下都应该调用 didReceiveRemoteNotification 。
  2. 如果需要的话,我不介意开始下载didFinishLaunchingWithOptions,但是当用户只是点击推送时,也会调用此方法。我能看出这两种情况的区别吗?

我启用了“远程通知”后台模式,推送有效负载通常如下所示:

"aps": {
    "alert": {
        "loc-args": [
            "Name",
            "Description"
        ],
        "loc-key": "new_release_body",
        "title-loc-args": {
        },
        "title-loc-key": "new_release_title"
    },
    "category": "NEW_RELEASE",
    "content-available": 1,
    "mutable-content": 1
}

谢谢!

标签: iospush-notification

解决方案


如果用户手动杀死了应用程序,苹果不会在后台唤醒你的应用程序,直到用户再次启动应用程序,或者重新启动他的设备。

也许您收到的案例didFinishLaunching是如果您杀死了您的应用程序,那么当您再次打开该应用程序时,您会在那里收到它?或者,也许您杀死了该应用程序,然后重新启动了设备?

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application#discussion


推荐阅读