2017-06-21 246 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中使用的那個。我不得不做一些代碼評論,使其工作。

相關問題