Cloudkit 公共数据库错误:“不允许写入操作”

Posted

技术标签:

【中文标题】Cloudkit 公共数据库错误:“不允许写入操作”【英文标题】:Cloudkit Public Database Error: "WRITE operation not permitted" 【发布时间】:2018-03-23 21:18:22 【问题描述】:

我目前的 CloudKit 公共数据库有问题。

有时我在修改记录时收到错误消息: 权限失败”(10/2007);服务器消息=“不允许写操作”; 错误代码为 10 permissionFailure

如果我的记录修改次数很少,我几乎永远不会收到错误,但是一旦我有更多的修改(每小时 3000 次以上),错误就会变得异常频繁,并且超过 20% 的请求会导致此错误。 这让我明白了一个事实,即我的代码一定没问题,因为该错误只会随着 CloudKit 活动的增加而发生。

当然,我(以及该应用的所有用户)都已登录 iCloud 并激活了 iCloud Drive。每个人的 WRITE 权限也被激活。

此外,请求速率也远低于每秒 40 个请求的限制(当许多用户处于活动状态时,最大值约为每秒 3 个请求)。

有人有想法吗?

【问题讨论】:

【参考方案1】:

同样的问题;不知道原因是什么,但发生在从一个 iCloud 帐户切换到另一个帐户的测试场景中。可能某些 CloudKit 状态被锁定在前一个帐户的令牌上。

通过(再次)退出 iCloud 并再次登录来解决。我将向用户实施“如果此问题仍然存在,请退出...登录...”的反馈。我希望它会非常罕见。

【讨论】:

撤回:它没有保持固定。 :(【参考方案2】:

我出现这个问题的原因:从一个 iCloud 帐户切换到另一个没有正确清除本地缓存(包括 Core Data 中的元数据),导致新帐户偶尔尝试更新属于前一个的云记录用户。

这种情况的解决方法取决于应用程序。在我的情况下,需要一个全新的切换(确认切换帐户后清除所有数据)。其他应用程序可能需要将数据克隆到新创建的云记录中(即使用正确的创建者/所有者元数据)。

【讨论】:

以上是关于Cloudkit 公共数据库错误:“不允许写入操作”的主要内容,如果未能解决你的问题,请参考以下文章

从模拟器查询公共数据库时出现 Cloudkit 错误

CloudKit“订阅重复”错误 - 获取 SubscriptionId

CloudKit fetchRecordWithID 错误:“获取资产失败”

CloudKit iOS 10 错误:帐户无权访问 CloudKit 帐户

cloudKit:公共数据库中的 CKFetchRecordChangesOperation

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