我正在测试我的应用程序没有经过身份验证的iCloud帐户,但我在订阅设备时收到此错误通知:
subscription error<CKError 0x1700581e0: "Not Authenticated" (9/1002); "This request requires an authenticated account"; Retry after 3.0 seconds>
这没关系,但我的问题是如何在尝试运行CKSubscription代码之前检查设备是否登录到iCloud?
我真的很感谢你的帮助。
答案 0 :(得分:9)
我最终在谷歌搜索“cloudkit此请求需要经过身份验证的帐户”。对我来说问题是我没有在模拟器中登录到iCloud。我有点假设我会自动运行我的开发Apple ID ...
答案 1 :(得分:0)
您可以在容器上使用accountStatusWithCompletionHandler方法。如果要使用订阅,则应返回.hashValue为1
的状态 container = CKContainer.defaultContainer()
container.accountStatusWithCompletionHandler({status, error in
if (error != nil) { NSLog("Error = \(error.description)")}
NSLog("Account status = \(status.hashValue) (0=CouldNotDetermine/1=Available/2=Restricted/3=NoAccount)")
})
答案 2 :(得分:0)
这是Objective-C版本:
CKContainer *container = [CKContainer defaultContainer];
[container accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError *error)
{
if (((accountStatus == 3) || (accountStatus == 2)) && (!error))
{
NSLog(@" no error but status %ld",accountStatus);
// typedef NS_ENUM(NSInteger, CKAccountStatus) {
// /* An error occurred when getting the account status, consult the corresponding NSError */
// CKAccountStatusCouldNotDetermine = 0,
// /* The iCloud account credentials are available for this application */
// CKAccountStatusAvailable = 1,
// /* Parental Controls / Device Management has denied access to iCloud account credentials */
// CKAccountStatusRestricted = 2,
// /* No iCloud account is logged in on this device */
// CKAccountStatusNoAccount = 3,
//
// }
}
if (error)
{
NSLog(@" accountStatus error %@",error);
}
} ];
答案 3 :(得分:0)
在swift 2中,你将状态与
进行比较case CouldNotDetermine
case Available
case Restricted
case NoAccount