如何检查iCloud是否以编程方式配置

时间:2011-10-19 10:33:34

标签: iphone icloud

以下是Apple Docs的句子: “如果未配置iCloud,请询问用户是否要配置它(如果他们想要配置iCloud,最好将它们转移到启动设置)。”

如何检查是否配置了iCloud以及如何启动iCloud的设置?

2 个答案:

答案 0 :(得分:27)

修改
如果您的目标是iOS6或更高版本,则可以使用[[NSFileManager defaultManager] ubiquityIdentityToken];。有关使用示例,请参阅@Dj S' answer :) 它比原始解决方案更快更容易,原始解决方案适用于针对iOS5及以上版本的用户

原始答案
iOS App programming guide - iCloud Storage中所述。可以通过向文件管理器询问ubiquity容器URL来检查:)

只要您在下面提供有效的普遍容器标识符,方法应该返回YES

- (BOOL) isICloudAvailable
{
    // Make sure a correct Ubiquity Container Identifier is passed
    NSURL *ubiquityURL = [[NSFileManager defaultManager] 
        URLForUbiquityContainerIdentifier:@"ABCDEFGHI0.com.acme.MyApp"];
    return ubiquityURL ? YES : NO;
}

但是,我发现URLForUbiquityContainerIdentifier:可能会在会话中第一次花几秒钟(我在iOS5中使用它,所以现在可能会有所不同)。我记得使用过这样的东西:

dispatch_queue_t backgroundQueue = 
   dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue,^{
   BOOL isAvailable = [self isICloudAvailable]
  /* change to the main queue if you want to do something with the UI. For example: */
   dispatch_async(dispatch_get_main_queue(),^{
       if (!isAvailable){
         /* inform the user */
         UIAlertView *alert = [[UIAlertView alloc] init...]
         [alert show];
         [alert release];
       }
   });
});

答案 1 :(得分:17)

只是为了补充上面的答案, 如果您只想知道iCloud是否适用于您的应用程序, 例如
1.没有设置iCloud帐户,或者 2.文档和数据被禁用(适用于所有应用程序)或
3.仅为您的应用程序禁用文档和数据

然后您可以将NSFileManager's ubiquityIdentityToken用于 iOS 6及以上版本 如果value为nil,则表示未配置iCloud帐户。否则,配置iCloud帐户。

id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
if (token == nil)
{
    // iCloud is not available for this app
}
else
{
    // iCloud is available
}

请注意,根据Apple docs,您可以从主线程中调用它。

  

因为此方法返回相对较快,您可以在启动时调用它,并且可以从应用程序的主线程中调用它。