CloudKit 推送通知订阅不起作用

Posted

技术标签:

【中文标题】CloudKit 推送通知订阅不起作用【英文标题】:CloudKit push notification subscription not working 【发布时间】:2015-03-12 17:59:58 【问题描述】:

我正在尝试使用 CloudKit 订阅推送通知。我收到此错误:

<CKError 0x170c5b1e0: "Unknown Item" (11/2003); server message = "could not find required field fieldID="25""

从此代码:

let subscription = CKSubscription(recordType: "PlayerData", predicate: NSPredicate(format: "TRUEPREDICATE"), options: CKSubscriptionOptions.FiresOnRecordCreation)
let notificationInfo = CKNotificationInfo()
notificationInfo.shouldBadge = false
subscription.notificationInfo = notificationInfo
PublicDb.saveSubscription(subscription, completionHandler:  (returnedSubscription: CKSubscription!, error: NSError!) in
     println("\(error)")
)

但是我没有一个名为“fieldID”的字段,在我的整个项目中也没有对它的任何引用。我也不知道 25 是从哪里来的。如果我更改我的记录类型和/或 NSPredicate,它仍然会发生。

我也尝试过设置,但没有

notificationInfo.shouldSendContentAvailable = true

这曾经对我有用,但现在我不能让它工作了。好像我的数据库在某处损坏了。我尝试删除记录类型并重新创建,但没有成功。

【问题讨论】:

这听起来像是你的 CloudKit 容器搞砸了。这是最近创建的容器,还是您在 ios 8 测试期间创建的?如果您尝试使用新容器,此订阅是否有效?如果您使用您的容器名称和CloudKit logs 提交一个雷达,那么如果容器损坏,Apple 可以清理您的容器服务器端。 感谢您的评论。我实际上是通过重置开发环境来修复它的。 fieldID=25 真是个谜。似乎我的数据以某种方式连接到了其他人的数据库。我检查了所有其他容器,它没有任何对“fieldID”的引用 很高兴你把它修好了。如果再次发生这种情况,雷达会很棒,这样如果服务器端出现错误,我们可以修复它。 @farktronix 在 iPhone 5s 上创建订阅时知道了 &lt;CKError 0x144525860: "Unknown Item" (11/2003); server message = "did not find required record type: _sub_trigger_sub_4ce2f1036aa884fc21ca48632a7b8095"; uuid = 984FDC7B-71B6-4762-A18C-30DE0F7F8F09; container ID = "my container"&gt; 在另一台设备上创建订阅。 【参考方案1】:

通过重置开发环境修复它。希望同样的事情不会发生在产品上。

【讨论】:

【参考方案2】:

同样的事情也发生在我身上。我不认为 fieldID 是由于其他人的数据库,而是苹果底层数据库结构的一部分。不幸的是,读数给我们开发人员零信息。开发环境的重置也解决了我的问题。值得注意的是,这发生在更改订阅中特别引用的记录的属性类型之后。我保留了属性名称,但更改了它的类型。

【讨论】:

我认为你在做某事。当我从某些订阅特别引用的记录类型中删除一个字段时,我遇到了这种情况。不幸的是,重新添加已删除的字段并没有帮助,删除引用的记录也没有帮助。我不得不重置环境。

以上是关于CloudKit 推送通知订阅不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CloudKit 订阅不起作用

iOS 未收到来自 CloudKit 的推送通知

CloudKit 向其他用户推送通知

QuickBlox,推送通知不起作用

CloudKit 通知的动态 alertBody

Objective C-推送通知不适用于 Cloudkit