通知服务扩展 - 当应用程序不是 运行 时发出 URL 请求

Notification Service Extension - make URL request when app is not running

我们在我们的应用中实现了 Notification Service Extension。我们的目标是从我们的服务器下载一些数据,修改didReceive(_:withContentHandler:).

中的通知内容

当应用程序 运行 在后台运行或刚刚终止时,它工作正常。然而,当应用程序不是运行ning时,它无法下载数据并且服务延长时间到期。

编辑: 好的,我编辑了这个问题,并删除了我的网络代码,因为我弄清楚了我的问题所在。然而,这导致了另一个问题。

当应用程序终止时,我的网络代码没有运行,因为我将用户的访问令牌存储在钥匙串上,当phone被锁定时无法访问。

所以,我现在陷入僵局:一方面,我不想将访问令牌存储在 UserDefaults 中,因为那不安全。另一方面,我需要在设备锁定时使用访问令牌,以显示正确的通知内容。 任何帮助表示赞赏。

即使设备已锁定,只要设置正确,您也可以访问钥匙串的内容。 但是,请注意,这将大大降低该信息的安全性。

如果您直接使用钥匙串,您可以将存储您的访问令牌的钥匙串项的 kSecAttrAccessible 属性 设置为 kSecAttrAccessibleAlways

如果您像大多数人一样使用 Swift Keychain Wrapper 等开源库,您可以执行以下操作:

KeychainWrapper.standard.set(accessToken, forKey: key, withAccessibility: .always)

另一个可能会节省您一些时间的注释,来自 Swift Keychain Wrapper 的文档:

Important: You can't modify value for key if it was previously set with different accessibility option. Remove the value for key and set it with new accessibility option. (Otherwise the value will not change).

如果您想了解钥匙串项目的可访问性,我建议您从 this 开始。