将iOS密钥链中保存的deviceid与使用相同iCloud帐户的所有设备同步吗?

时间:2017-06-21 15:53:58

标签: ios swift keychain

即使重新安装应用后,我也希望设备具有相同的设备ID。我打算将它保存到钥匙串并每次检索它。 我想知道密钥链数据是否会使用相同的iCloud电子邮件ID在所有设备上同步。

我在downloadable_link使用了keychainwrapper

1 个答案:

答案 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中使用的那个。我不得不做一些代码评论以使其有效。