ios - 推送通知有时会调用 didFinishLaunchingWithOptions 而不是 didReceiveRemoteNotification
问题描述
我有一个在 iOS 13 上运行的应用程序,它接收包含警报消息和内容可用的推送通知(以允许后台下载内容)。但我注意到一个问题,即永远不允许启动某些后台下载。
查看我的日志,我可以看到大部分时间application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
都按预期调用并开始下载。
但有时(即使在没有使用电话的午夜)它会选择application(_:didFinishLaunchingWithOptions:)
使用推送有效负载进行呼叫。在这种情况下didReceiveRemoteNotification
根本不调用。
以下是我的问题:
- 这是预期的行为吗?该文档有点含糊,但听起来在每种情况下都应该调用 didReceiveRemoteNotification 。
- 如果需要的话,我不介意开始下载
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
}
谢谢!
解决方案
如果用户手动杀死了应用程序,苹果不会在后台唤醒你的应用程序,直到用户再次启动应用程序,或者重新启动他的设备。
也许您收到的案例didFinishLaunching
是如果您杀死了您的应用程序,那么当您再次打开该应用程序时,您会在那里收到它?或者,也许您杀死了该应用程序,然后重新启动了设备?
https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623013-application#discussion
推荐阅读
- javascript - iframe 中的不可见边框
- arrays - 出现错误:二元运算符“==”不能应用于两个“x”操作数,如何删除此对象数组中的某些元素
- cumsum - 从1开始计算每组因子的连续数字序列
- laravel - 在雄辩的 Where 子句中使用类似通配符的语法在两个字符串之间进行搜索
- python - 无法从 python 上传到 Team google drive
- php - tcpdf 自定义字体奇怪的字符
- c# - 如何使用 If 检查 SqlParameter 是否为真
- python - 在不同的子目录中操作数据框
- python - 我无法在 Python Selenium 中选择 iframe 中的元素(我不知道它是否是 iframe,但它就像弹出页面)
- assembly - 当我使用软中断时,程序从保护模式返回到实模式。为什么会这样?