2013-06-03 58 views
3

我試圖找出一種方法來生成一個獨特的iCloud ID,它將跨設備相同。我的應用程序將數據存儲在一個在線數據庫中,我想將其綁定回iCloud ID。這給用戶提供了無需處理登錄(因爲所有數據都與他們的iCloud賬戶相關聯)的良好用戶體驗,而不會因爲使用iCloud糟糕的同步而陷入困境。問題是,據我所知,沒有API會給我這種ID。跨設備的iCloud GUID

事情我已經試過/思考:

1)NSUbiquitousKeyValueStore

不行的,因爲該值將得到更新,「晚些時候」,即 - 當蘋果感覺它。

2)的iCloud文檔存儲

同樣的問題爲#1,用存儲在所述裝置中的隨機文件,用戶可以通過手

3除去的額外的獎勵)使用[[ NSFileManager defaultManager] ubiquityIdentityToken]

由於無處不在的令牌的字節對於任何給定的登錄會話都是相同的,我想這可能是跨設備的情況。不使用地址簿聯繫人

的情況下

4)似乎將是不可靠的(如果他們改變他們的主要電子郵件/電話號碼/名稱會發生​​什麼),再加上有惱人的副作用/嚇壞了,在首次啓動時滾動我自己的登錄系統依賴於遠程服務器

這似乎是唯一的用戶(他們怎麼知道我不是偷他們的所有聯繫人?)

5)選項可用,雖然我會公關更好的一個。

在此先感謝

+0

您好。我只是想知道你是否想出了一個解決方案。謝謝! –

+0

@ JCS007:對不起。看起來像下面的答案是要走的路。答案5是唯一合理的解決方案(即使是iOS 7也是如此) –

回答

1

沒有爲iCloud中沒有持久的唯一標識符。

選項5是最好的選擇,除非您想對使用文檔存儲的sync'd文件執行衝突解決。

8

也許這已經太遲了,沒有用,但iOS 8已經提供了一個解決方案。從WWDC 2014的「Intro to CloudKit」會話:

因此,我們所做的是在集裝箱的容器基礎上,我們提出了一個隨機ID。這是一個穩定的標識符,無論客戶在與此容器通話時運行的客戶端是否具有相同的標識符,都是您的應用程序,但它不會通過任何個人信息來識別用戶。 ...我們已經給予您足夠的支持,如果您希望您可以使用CloudKit框架在您的應用程序中通過iCloud流程實現登錄。

[的http://asciiwwdc.com/2014/sessions/208轉錄禮貌]爲了充實說出來多一點,如果你的應用程序被規定爲CloudKit存儲則其默認容器配備了一個自動生成的用戶記錄表示當前登錄的iCloud用戶(如果有的話)。與此用戶記錄相關聯的UUID(實際上稱爲recordName)與您的應用在整個安裝期間和跨設備上保持一致。

例如爲:

[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) { 
    … 
    myiCloudUserID = recordID.recordName; 
}];