如何检测用户是否为我的应用启用了iCloud?

Eag*_*ver 6 iphone ipad ios icloud ios6

我开发了支持iCloud的iPhone应用程序,但我遇到的问题是,即使用户为我的应用程序关闭iCloud备份,它也会重新启动iCloud并反映我的其他设备上的更改,所以我想知道如何我可以得到我的应用程序是否启用了iCloud.它专门用于App not for Device,如果设备启用了iCloud,但我的应用程序已关闭,那么它不应该进行任何备份,请帮助我们.

Thanx提前.

小智 8

如果您使用的是键值而不是文档存储,我建议您使用此选项.

id iCloudToken = [[NSFileManager defaultManager] ubiquityIdentityToken];
if ( iCloudToken != nil) {
// User has enabled icloud in your app...
} else {
// Icloud is not enabled for your app...
}
Run Code Online (Sandbox Code Playgroud)

现在我推荐上述方法的原因是,在新的Xcode编译器中,您现在可以决定是否要使用文档存储.如果您选择仅使用键值存储,则NSFileManager检查将失败,因为您没有在权利中定义容器标识符.但是,如果用户允许您的应用运行,ubiquityIdentityToken将始终存在,这意味着如果用户允许您的应用访问iCloud,它将始终触发true或false.


Iro*_*ill 2

请使用它来检查您的 iCloud 的状态是否已启用。

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSURL *iCloudURL = [fileManager URLForUbiquityContainerIdentifier:nil]; 
NSLog(@"%@", [iCloudURL absoluteString]); 

if(iCloudURL){ 
NSUbiquitousKeyValueStore *iCloudStore = [NSUbiquitousKeyValueStore defaultStore]; 
[iCloudStore setString:@"Success" forKey:@"iCloudStatus"]; 
[iCloudStore synchronize]; // For Synchronizing with iCloud Server 
NSLog(@"iCloud status : %@", [iCloudStore stringForKey:@"iCloudStatus"]); 
}
Run Code Online (Sandbox Code Playgroud)

这会告诉你它是开/关:)

  • 关于“URLForUbiquityContainerIdentifier:”方法,Apple 更新了他们的文档:“重要提示:不要从应用程序的主线程调用此方法。因为此方法可能需要花费大量时间来设置 iCloud 并返回所请求的 URL,您应该始终从辅助线程调用它。要确定 iCloud 是否可用,尤其是在启动时,请改为调用 ubiquityIdentityToken 方法。 (2认同)
  • Apple 此后更新了他们的文档:“重要提示:不要从应用程序的主线程调用此方法。因为此方法可能需要花费大量时间来设置 iCloud 并返回请求的 URL,所以您应该始终从应用程序的主线程调用它。辅助线程。要确定 iCloud 是否可用,尤其是在启动时,请检查 NSURLRelationship 属性的值。” (2认同)