0

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

当应用程序在后台运行或刚刚终止时,它工作正常。但是,当应用程序未运行时,它无法下载数据并且服务扩展时间到期。

编辑:好的,我编辑了这个问题,并删除了我的网络代码,因为我知道我的问题是什么。然而,这导致了另一个问题。

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

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

4

1 回答 1

1

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

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

如果像大多数人一样,您正在使用诸如Swift Keychain Wrapper之类的开源库,则可以执行以下操作:

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

从 Swift Keychain Wrapper 的文档中可以节省一些时间的另一个注意事项:

重要提示:如果之前使用不同的可访问性选项设置了键的值,则无法修改它的值。删除 key 的值并使用新的辅助功能选项设置它。(否则值不会改变)。

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

于 2020-11-26T23:54:55.310 回答