Это то, чем я закончил.
Я читал, что один и тот же UUID будет использоваться на всех устройствах с одной и той же учетной записью iCloud (не уверен в этом).
Мне пришлось ограничить вход в приложение до 3 устройств для каждого идентификатора электронной почты. Если данные связки ключей будут синхронизированы, я не смогу этого сделать. Если у меня 3 разных iPhone, это будет считаться одним устройством только в том случае, если пользователь использует одну и ту же учетную запись icloud.
После некоторого поиска в Google я наткнулся на 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!
}
Вы можете проверить образец приложения в быстром 3 здесь в GITHUB. Если у кого-то есть лучший ответ, позвольте я знаю.
ПРИМЕЧАНИЕ: SAMKeychain с их официальной страницы на github у меня не работал должным образом. Используйте тот, который я использую в UniqueUUIDAPP. Мне пришлось сделать некоторые комментарии к коду, чтобы он заработал.
person
abhimuralidharan
schedule
21.06.2017