我花了两天时间没有阅读和测试,因为有很多关于这个主题的信息。不幸的是,我还没有找到解决方案。我无法实现自己的身份验证,因为这对我想要解决的问题没有帮助(请参阅问题末尾的背景)。
这是我目前最好的方法:
由于https://stackoverflow.com/a/8677177/1443733和 SwiftKeychainWrapper ( https://github.com/jrendel/SwiftKeychainWrapper )的建议,我正在生成一个 UUID 并将其存储在 KeyChain 中
简短的漂亮代码是:
let stored = KeychainWrapper.stringForKey("UUID")
if stored != nil {
Helper.log(TAG, msg: "retrieved from keychain: \(stored!)")
} else {
let theUUID = CFUUIDCreate(nil)
let str = CFUUIDCreateString(nil, theUUID)
Helper.log(TAG, msg: "generated UUID: \(str)")
let ret = KeychainWrapper.setString(str, forKey: "UUID")
Helper.log(TAG, msg: "setkeychain: \(ret)")
}
但是存储在钥匙串中的 UUID 似乎是每个设备而不是每个商店 ID。
当我像上面那样存储 UUID 并在设备上使用不同的 Store ID 登录时,KeychainWrapper.stringForKey("UUID")
仍然返回其他用户的值。
他们不是将值存储在 store-id 钥匙串中的一种方式吗?
看来我很接近所以我希望有人能指出我正确的方向。
如果这种方法(使用钥匙串)不能成功,请告诉我。
我认为您也可以问一个不同的问题:是否有一些我可以读取/生成的神秘数据或随着设备上当前使用的 Store Id 发生变化的存储?
哦...和 Swift 示例首选 ;)
背景信息: 我在我的应用程序中使用 IAP,并希望在收据的刷新有效后保存用户的 Store-Id。每次启动应用程序时,我都会检查当前的 Store-Id 是否与保存的相同。如果没有,我会立即触发收据的刷新。如果失败,我会退回到应用程序的免费版本。