iOS钥匙链数据将在应用程序删除并重新安装后持续存在



如您所知,苹果禁止在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()
}

我知道的最简单的解决方法。我希望这会有所帮助。

最新更新