Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS密钥链数据在应用程序删除并重新安装后是否会保留?_Ios_Swift_Keychain - Fatal编程技术网

iOS密钥链数据在应用程序删除并重新安装后是否会保留?

iOS密钥链数据在应用程序删除并重新安装后是否会保留?,ios,swift,keychain,Ios,Swift,Keychain,正如你所知,苹果禁止在iOS设备上获取唯一ID。但有时我们需要识别设备,例如,当应用程序第一次安装时只有一个用户获得了奖金。我们不想在一台设备上签下多个用户(赚取奖金) 因此,我们从设备中获取了vendorID,并将该数据保存在一个钥匙链上(vendorID一次又一次地更改了时间,但我们不想更改ID)。之后,我们检查该数据是否在钥匙链上可用。我读到这个帖子,相关的钥匙链数据将被删除后的应用程序删除 但当我尝试这个场景时。我的钥匙链数据不删除,删除后钥匙链数据保持不变 所以我的问题就从这一点开始了

正如你所知,苹果禁止在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是的,看起来和我很像。谢谢