如果用戶登錄到iCloud,我將如何檢測,特別是?檢查URLForUbiquityContainerIdentifier的返回值是非常有限的:如何檢測用戶是否登錄到iCloud?
1)它不能區分沒有被簽入iCloud的用戶與其他場景, iCloud未啓用。 2)如果用戶在遊戲仍在後臺運行時從設置應用程序登錄到iCloud,它似乎沒有改變其行爲,然後返回到應用程序嘗試訪問iCloud服務。
是否有更可靠的方式來檢測用戶是否登錄?
如果用戶登錄到iCloud,我將如何檢測,特別是?檢查URLForUbiquityContainerIdentifier的返回值是非常有限的:如何檢測用戶是否登錄到iCloud?
1)它不能區分沒有被簽入iCloud的用戶與其他場景, iCloud未啓用。 2)如果用戶在遊戲仍在後臺運行時從設置應用程序登錄到iCloud,它似乎沒有改變其行爲,然後返回到應用程序嘗試訪問iCloud服務。
是否有更可靠的方式來檢測用戶是否登錄?
沒有辦法區分「用戶未登錄」和「未啓用iCloud」。您在應用程序中瞭解的是您的應用程序目前是否可以訪問iCloud,但如果答案爲否,那麼您不知道爲什麼。
但是,您的問題#2有一個解決方案 - 觀察NSUbiquityIdentityDidChangeNotification
。它會在整個iCloud狀態發生變化時觸發 - 用戶登錄,用戶註銷,用戶切換帳戶。
此外,從iOS 6中對存在的方法[[NSFileManager defaultManager] ubiquityIdentityToken]
,它告訴你,如果icloud是可用的並且如果用戶已切換帳戶
有趣的是[[[NSFileManager defaultManager] ubiquityIdentityToken]'適用於我的iPhone,但在我的iPad上一直返回零 – 2014-09-17 20:59:34
請注意,如果您登錄到iCloud並且應用程序未使用文檔(例如鍵值,則ubiquityIdentityToken'爲'nil'僅存儲)。在iOS 9.3+上, – bio 2016-01-22 12:34:02
ubiquityIdentityToken也適用於iPad – 2016-08-02 03:29:11
我不能得到任何我的iOS應用或我tvOS應用接收了' NSUbiquityIdentityDidChangeNotification'。也許事情多年來發生了變化(?)。但是,'NSUbiquitousKeyValueStoreAccountChange'仍然有效。 – bio 2016-01-22 12:35:47