是否所有用户都使用相同的订阅接收公共数据库订阅通知?

Vam*_*mos 8 cloudkit

我已经设置了CKSubscription*,以便我收到记录类型的更改.

我正在使用公共数据库.

当我使用相同的用户(相同的iCloud帐户)进行测试时,我会收到通知.

如果我使用其他用户(不同的iCloud帐户),我不会收到通知.

订阅是否仅适用于同一用户的设备之间?

以下是描述订阅的文档:

使用CKSubscription对象来跟踪服务器上发生的更改.订阅的作用类似于服务器上的持久查询,可以跟踪记录的创建,删除和修改.发生更改时,它们会触发推送通知的传递,以便您的应用可以正确响应.

https://developer.apple.com/library/ios/documentation/CloudKit/Reference/CKSubscription_class/index.html#//apple_ref/occ/cl/CKSubscription

无论哪个用户编辑记录,我都希望收到通知,并且订阅谓词仍应匹配.

UPDATE

*每个用户都有一个具有相同谓词的订阅,主要关注具有特定属性值的单个recordType.

此订阅的有效负载仅用于推送shouldSendContentAvailable = YES.

文件内容如下:

当此属性为YES时,服务器在推送通知的有效负载中包含content-available标志.该标志会导致系统唤醒或启动当前未运行的应用程序.然后,应用程序将获得后台执行时间,以下载与推送通知相关的任何数据,例如更改的记录集.如果应用程序已在前台运行,则包含此标志不会产生额外影响,并且通知将传递给应用程序代理以便照常处理.

recordType的安全权限是:

在此输入图像描述

进一步更新

检查设备未接收推送的日志,并且看到:

apsd[85]: Silent Push: Deny app not available
Run Code Online (Sandbox Code Playgroud)

重启设备,现在工作正常!

Vam*_*mos 3

此行为是由于我的 CKSubscription 配置方式错误造成的。如果我们希望所有用户都收到来自订阅的通知,那么它不应该设置 zoneID(应该保持为零)。我将 zoneID 设置为 defaultRecordZone 中的值,这将仅将通知限制为当前用户,因为 defaultRecordZone 的用户是当前用户。

更新

终于解决了问题。不仅是zoneID的问题,而且似乎还有一个bug。我的订阅 notificationInfo 只是将 shouldSendContentAvailable 设置为 YES。这不会导致当前用户(u1d1->u1d2,但不是 u1d1>u2d2)以外的任何人所做的更改触发订阅通知。我只是添加了一个alertBody,然后通知就开始触发。

还有其他人面临这个问题吗?

更新2

重新启动设备解决了该问题。