用户未登录时,用户设置拒绝了错误 CloudKit 访问

Posted

技术标签:

【中文标题】用户未登录时,用户设置拒绝了错误 CloudKit 访问【英文标题】:error CloudKit access was denied by user settings when user is not sign in 【发布时间】:2015-05-22 18:27:26 【问题描述】:

我正在尝试获取公共数据库中的更改通知:

CKServerChangeToken *token = [[cloudKitToken helper] getCloudKitToken];
CKFetchNotificationChangesOperation *op = [[CKFetchNotificationChangesOperation alloc]
                                           initWithPreviousServerChangeToken:token];
NSMutableArray *noteIds = [[NSMutableArray alloc] init];

op.notificationChangedBlock = ^(CKNotification *note) 
    CKNotificationID *noteId = note.notificationID;
    [noteIds addObject:noteId];

;

op.fetchNotificationChangesCompletionBlock = ^(CKServerChangeToken *token, NSError *error) 

    NSLog(@"error %@", error.localizedDescription);
;

[[CKContainer defaultContainer] addOperation:op];

但是当用户没有登录到 iCloud 时,我得到这个错误:“错误 CloudKit 访问被用户设置拒绝”

通过另一只手使用相同的设备,我可以毫无问题地从公共数据库中获取记录。

我试图用 CKFetchNotificationChangesOperation 做的是获取设备和 cloudkit 之间的增量。

你们中的任何人都知道当用户没有登录到 iCloud 时我如何获取增量吗?在这种情况下,获取记录是我唯一的选择吗?

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

使用 CKFetchNotificationChangesOperation,您可以检索自上次提取以来发送给您的所有通知。这些通知链接到您之前为设备创建的订阅。订阅链接到一个帐户。因此,您必须使用同一帐户登录才能获取这些通知。

在您的情况下,使用 CKFetchRecordChangesOperation 可能会更好。然后,您将能够仅查询自上次查询以来 CloudKit 的更改。因为它只是一个使用“服务器更改令牌”的查询。第一次可以用 nil 查询,然后检索所有记录。你会得到一个“服务器更改令牌”作为回报。只需将其保存在设备上,下次启动应用程序时只需使用该令牌。这样就无需登录 iCloud。 (如果您的数据是公开的)

【讨论】:

以上是关于用户未登录时,用户设置拒绝了错误 CloudKit 访问的主要内容,如果未能解决你的问题,请参考以下文章

当用户未登录 iCloud 时,我可以使用 CloudKit 在我的应用程序中使用订阅吗?

CloudKit 错误:在 Mac 上未经过身份验证,但我已登录

使用 CloudKit/iCloud 时 Apple Store 构建被拒绝

CloudKit 仪表板未更新

onlyoffice文档协作的权限开发,利用casbin和golang语言

获取 403:禁止访问:当用户意外关闭登录会话时,访问被拒绝