Swift 通知服务扩展-在应用程序未运行时发出URL请求

Swift 通知服务扩展-在应用程序未运行时发出URL请求,swift,xcode,push-notification,apple-push-notifications,unnotificationserviceextension,Swift,Xcode,Push Notification,Apple Push Notifications,Unnotificationserviceextension,我们在应用程序中实现了。我们的目标是从我们的服务器下载一些数据,并在didceive(\uquo:withContentHandler:)中修改通知内容 当应用程序在后台运行或刚刚终止时,它工作正常。但是,当应用程序未运行时,它无法下载数据,服务扩展时间到期 编辑: 好的,我编辑了这个问题,删除了我的网络代码,因为我发现了我的问题所在。然而,这导致了另一个问题 我的网络代码在应用程序终止时没有运行,因为我将用户的访问令牌存储在钥匙链上,当手机锁定时无法访问 因此,我现在陷入了僵局:一方面,我不想

我们在应用程序中实现了。我们的目标是从我们的服务器下载一些数据,并在
didceive(\uquo:withContentHandler:)
中修改通知内容

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

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

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

因此,我现在陷入了僵局:一方面,我不想将访问令牌存储在
UserDefaults
中,因为这是不安全的。另一方面,当设备被锁定时,我需要使用访问令牌来显示正确的通知内容。
非常感谢您的帮助。

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

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

如果像大多数人一样,您使用的是开源库,例如,您可以执行以下操作:

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

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

重要提示:如果键的值以前设置过,则不能修改该值 具有不同的可访问性选项。删除key和set的值 它具有新的可访问性选项。(否则该值将不可用。) 改变)


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

事实上,我使用的是Swift钥匙链包装器,这解决了我的问题,因此感谢您的解释。