ios - 删除并重新安装应用后,iOS 钥匙串数据会保留吗?
问题描述
如您所知,Apple 禁止在 iOS 设备中获取唯一 ID。但有时我们需要识别设备,例如,当应用程序首次安装时只有一次用户时获得奖励。我们不想在一台设备上签署(赚取奖金)多个用户。
因此,我们从设备中获取了 vendorID 并将此数据保存在钥匙串上(vendorID 随时间更改,但我们不想更改 ID)。之后,我们检查此数据在钥匙串上是否可用。我读了这个帖子[iOS autodelete Keychain items after uninstall][1],相关的钥匙串数据将在应用程序删除后被删除。
但是当我尝试这种情况时。我的钥匙串数据不会删除,并且钥匙串数据在删除后仍然存在。
所以我的问题是从这一点提出的。有人知道这个问题吗?删除我的应用程序后,钥匙串数据将被保留或删除所有钥匙串数据。
卸载后钥匙串数据会被删除吗?
看看我的钥匙串数据保存功能。
class func getUniqueDeviceID() -> String {
guard let uniqueDeviceId = KeychainKeeper.shared.uniqueDeviceID else {
let deviceId = (UIDevice.current.identifierForVendor?.uuidString)~
KeychainKeeper.shared.uniqueDeviceID = deviceId
return deviceId
}
return uniqueDeviceId
}
请不要提供其他解决方案。我们陷入了这种情况。我们想确定删除应用程序钥匙串后是否会被删除 [1]: https ://forums.developer.apple.com/thread/36442
回答 :
钥匙串数据现在始终存在。
解决方案
钥匙串数据现在始终存在。
钥匙串值的自动删除是在 10.3 的 beta 版本中,但出于某种原因,他们消除了这种可能性。我想很多应用程序都习惯了不可丢弃的钥匙串。
检查这个问题。
有一个超级简单的方法UserDefaults
:
func clearKeychainIfWillUnistall() {
let freshInstall = !UserDefaults.standard.bool(forKey: "alreadyInstalled")
if freshInstall {
KeychainKeeper.shared.clear()
UserDefaults.standard.set(true, forKey: "alreadyInstalled")
}
}
叫它进来AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
self.clearKeychainIfWillUnistall()
}
我知道的最简单的解决方法。我希望它会有所帮助。
推荐阅读
- javascript - npm install 和手动安装有什么区别?
- sql - 提取所有但最后一个词
- reactjs - 我的反应应用程序使用 useContext 来存储登录名和用户信息,但是如果我通过更改 URL 进行导航,所有信息都会丢失并且一切都会重置
- user-interface - 尝试使用 'Connect' With Changed 事件对 nil 进行索引
- arrays - PowerShell XML 多个 ChildNodes 逗号分隔的字符串到数组
- java - Hive Regex 表现得很贪婪
- visual-studio-code - Whitelabel 错误页面 - 出现意外错误(类型=内部服务器错误,状态=500)
- firebase - 将图标变量或颜色变量保存到 Firebase 并使用它
- python - TensorFlow 2.0:无法在图形模式下训练具有自定义拟合的子类模型
- java - Spring Boot + Spring Batch + HSQLDB -> 为 JobRepository 配置 HSQLDB