2017-06-21 30 views

回答

0

这就是我最终做的。

,我读了相同的UUID将跨越与同一iCloud帐户的所有设备共享。(不知道这一点。)

我不得不限制为每个电子邮件ID高达3台设备的应用程序登录。如果钥匙串数据会同步,那么我不能这样做。如果我有3个不同的iPhone,只有当用户使用同一个icloud帐户时,才会将其视为单个设备。

经过一些googleing后,我碰到了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.If有人在迅速3 here示例应用程序有一个更好的答案,请让我知道。

注意:从他们的官方github页面SAMKeychain不适合我。请使用我在UniqueUUIDAPP中使用的那个。我不得不做一些代码评论,使其工作。

相关问题