如您所知,苹果禁止在iOS设备中获取唯一ID。但有时我们需要识别设备,例如,当应用程序第一次安装时,只有一个用户获得了奖励。我们不想在一台设备上注册(赚取奖金(多个用户。
因此,我们从设备中获得了vendorID,并将这些数据保存在钥匙链上(vendorID会随时间变化,但我们不想更改ID(。在那之后,我们检查这个数据在钥匙链上是否可用。我读到这个线程[iOS自动删除卸载后的钥匙链项目][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的测试版中,但出于某种原因,他们删除了这种可能性。我想很多应用程序已经习惯了不可丢弃的密钥链。
检查这个问题。
通过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()
}
我知道的最简单的解决方法。我希望这会有所帮助。