Будет ли идентификатор устройства, сохраненный в связке ключей iOS, синхронизироваться на всех устройствах, использующих одну и ту же учетную запись iCloud?

Я хотел иметь тот же идентификатор устройства для устройства даже после повторной установки приложения. Я планировал сохранять его на связку ключей и извлекать каждый раз. Я хочу знать, будут ли данные связки ключей синхронизироваться на всех устройствах с использованием одного и того же идентификатора электронной почты iCloud.

Я использую keychainwrapper в этой downloadable_link.


person abhimuralidharan    schedule 21.06.2017    source источник


Ответы (1)


Это то, чем я закончил.

Я читал, что один и тот же 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