iOS钥匙串数据在应用删除和重新安装后是否会持久存在?

9
如您所知,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

答案:

钥匙串数据现在始终保留。


1
我很久以前就完成了它,即使你删除应用程序,数据仍将存在。如果您需要在每次启动时获取新数据,则请在应用程序启动时删除此应用程序的所有数据,我不知道要求是什么。 - Gyanendra
1
卸载应用程序时,钥匙链数据不会被删除。如果您想要删除它,可以在您的应用程序第一次运行时应用逻辑。 - Niraj
1
密钥链数据会在您删除应用程序后仍然保留... - Jawad Ali
你的情况下手动删除钥匙串值是否可接受?或者你想进一步深入了解钥匙串API吗? - Andrew
2
您可能还想了解一下DeviceCheck框架 - 这可以让您强制执行每个设备仅有一个奖励,即使设备被完全擦除。 - Paulw11
显示剩余2条评论
1个回答

26

现在钥匙串数据始终保留。

自动删除钥匙串值曾经在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()
}
我知道的最简单的解决办法。希望它能够有所帮助。

你有关于“他们移除了这个可能性”的苹果文档或链接吗? - Emre Gürses
1
我认为这篇文章现在在这个帖子上:https://developer.apple.com/forums/thread/36442,是吗? - La pieuvre
@Lapieuvre 是的,对我来说看起来很相似。谢谢。 - Andrew
值得注意的是,在运行于苹果硅芯 Mac 上的 iOS 应用中,由于 UserDefaults 存储的磁盘空间与实际应用程序分开存储,因此在删除应用程序时不会“清除” UserDefaults。这导致这种“解决方法”无法按预期工作,因为重新安装后,“alreadyInstalled”标志将仍然存在,除非手动删除其他存储(这不太可能被大多数用户执行)。 - Ohifriend
旧的应用程序版本将被视为新的应用程序安装。这可能会成为一个问题。 - mulp
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接