即使重新安装应用后,我也希望设备具有相同的设备ID。我打算将它保存到钥匙串并每次检索它。 我想知道密钥链数据是否会使用相同的iCloud电子邮件ID在所有设备上同步。
我在downloadable_link使用了keychainwrapper
。
答案 0 :(得分:0)
这就是我最终要做的事情。
我读到相同的UUID将在具有相同iCloud帐户的所有设备上共享。(不确定。)
我必须为每个电子邮件ID限制最多3个设备的应用登录。如果钥匙串数据将被同步,那么我不能这样做。如果我有3个不同的iPhone,只有当用户使用相同的icloud帐户时才会被视为单个设备。
经过一些谷歌搜索后,我遇到了SAMKeychain。
它有一个名为synchronizationmode
的属性,我认为它可以防止钥匙串键/值同步到iCloud。
我使用以下代码生成UUID。
func UUID() -> String {
let bundleName = Bundle.main.infoDictionary!["CFBundleName"] as! String
let accountName = Bundle.main.bundleIdentifier! + String(Bundle.main.bundleIdentifier!.characters.reversed()) // just one extra layer of protection.. :p
var applicationUUID = SAMKeychain.password(forService: bundleName, account: accountName)
if applicationUUID == nil {
applicationUUID = (UIDevice.current.identifierForVendor?.uuidString)!
// Save applicationUUID in keychain without synchronization
let query = SAMKeychainQuery()
query.service = bundleName
query.account = accountName
query.password = applicationUUID
query.synchronizationMode = SAMKeychainQuerySynchronizationMode.no
do {
try query.save()
} catch let error as NSError {
print("SAMKeychainQuery Exception: \(error)")
}
}
return applicationUUID!
}
你可以在GITHUB中查看swift 3 here中的示例应用程序。如果有人有更好的答案,请告诉我。
注意:他们的官方github页面中的SAMKeychain对我来说无法正常工作。请使用我在UniqueUUIDAPP中使用的那个。我不得不做一些代码评论以使其有效。