![](/img/trans.png)
[英]If NSTimer does not work when an iOS app is in the background, how can I get my app to wake up periodically?
[英]What can wake up an iOS app in the background when the device is locked?
我有一个没有配置任何后台模式功能的 iOS 应用程序。 没有声音、位置服务或蓝牙。 使用kSecAttrAccessible
值kSecAttrAccessibleWhenUnlocked
在钥匙串中还有一个存储的身份验证令牌。
当应用程序处于活动状态时,它将连续(每 20 秒左右)尝试访问钥匙串,以获取身份验证令牌以执行网络请求。 但是,当应用程序在锁定设备的后台运行时,我可以看到(在我们的远程日志系统中)应用程序在大约 5-8 小时后尝试打开钥匙串。 即某些东西唤醒了应用程序。
我看到我们从钥匙串中得到-25308 errSecInteractionNotAllowed
, UIApplication.shared.applicationState
是background
并且UIApplication.shared.isProtectedDataAvailable
返回false
(即设备被锁定)。
正如我在日志中看到的iOS14.8.1一样,它不可能是Apple在iOS15中发布的预热功能。 有什么想法可以像这样唤醒应用程序吗?
我认为你看错了。 应用程序在后台被唤醒的原因并不重要。 您配置的很多东西都可以做到这一点; 例如,收到通知,在位置监控期间收到位置等。甚至可以想象系统可能会出于多种原因在后台任意唤醒您的应用程序。
你的工作只是保持连贯一致。 不要假设应用程序无法在后台唤醒。 如果应用程序是否在后台对您所做的事情很重要,那么就像您正在做的那样,检查UIApplication.shared.applicationState
并且如果在这些条件下不合适则不要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.