iOS密钥链数据在应用程序删除并重新安装后是否会保留?
正如你所知,苹果禁止在iOS设备上获取唯一ID。但有时我们需要识别设备,例如,当应用程序第一次安装时只有一个用户获得了奖金。我们不想在一台设备上签下多个用户(赚取奖金) 因此,我们从设备中获取了vendorID,并将该数据保存在一个钥匙链上(vendorID一次又一次地更改了时间,但我们不想更改ID)。之后,我们检查该数据是否在钥匙链上可用。我读到这个帖子,相关的钥匙链数据将被删除后的应用程序删除 但当我尝试这个场景时。我的钥匙链数据不删除,删除后钥匙链数据保持不变 所以我的问题就从这一点开始了。有人知道这个问题吗?删除我的应用程序后,钥匙链数据将被保留或删除所有钥匙链数据 卸载后将删除钥匙链数据? 查看我的钥匙链数据保存功能iOS密钥链数据在应用程序删除并重新安装后是否会保留?,ios,swift,keychain,Ios,Swift,Keychain,正如你所知,苹果禁止在iOS设备上获取唯一ID。但有时我们需要识别设备,例如,当应用程序第一次安装时只有一个用户获得了奖金。我们不想在一台设备上签下多个用户(赚取奖金) 因此,我们从设备中获取了vendorID,并将该数据保存在一个钥匙链上(vendorID一次又一次地更改了时间,但我们不想更改ID)。之后,我们检查该数据是否在钥匙链上可用。我读到这个帖子,相关的钥匙链数据将被删除后的应用程序删除 但当我尝试这个场景时。我的钥匙链数据不删除,删除后钥匙链数据保持不变 所以我的问题就从这一点开始了
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
}
请不要提供其他解决方案。我们被困在这种情况下。我们希望确保在删除应用程序后,keychain是否将被删除keychain数据现在始终保持不变 钥匙链价值的自动删除测试版为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()
}
我所知道的最简单的解决方法。我希望这会有所帮助。我很久以前就这么做了,即使你删除了应用程序,数据也会在那里。我不知道要求是什么,如果你每次启动都需要新数据,请在应用启动时删除此应用的所有数据。卸载应用时不会删除钥匙链数据。如果您想删除,则可以在应用程序首次运行时应用逻辑。即使您删除了应用程序,钥匙链数据也会持续存在……手动删除适用于您场景的钥匙链值是否可以接受?或者你想进一步深入研究钥匙链API?你可能还想研究DeviceCheck框架-这允许你对每台设备强制执行一项奖励,即使设备被完全擦除。你有任何与此“他们删除了此可能性”@EmreGürses,last messages相关的apple文档ro链接吗。我所发现的一切。简单而完美。我想这篇帖子现在在这条线上:,是吗?@Lapieuvre是的,看起来和我很像。谢谢