问题标签 [cksubscription]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
32 浏览

ios - 数据库订阅 - 请勿打扰模式

问题:

当设备处于请勿打扰模式时(即使应用程序处于前台),我没有收到对private和的订阅更改(通知)。shared databases

笔记:

当设备未处于“请勿打扰”模式时,我会在订阅更改发生时收到更改。

代码:

注册远程通知:

数据库订阅:

接收通知:

由于我没有使用声音/徽章/警报/carplay(UNAuthorizationOptions),我选择了上述方法。

我的假设:

  • 我假设请勿打扰仅适用于任何会以视觉/或声音提醒用户的东西。
  • 我假设静默通知用于数据更改并且不会受到它的影响。(就像他们不需要任何授权一样)

问题:

  1. 我错过了上述问题的任何步骤吗?
  2. 在另一种情况下,当应用程序处于“请勿打扰”模式但为应用程序关闭后台刷新时,尽管应用程序处于前台,但我没有收到订阅更改通知。
0 投票
0 回答
148 浏览

push-notification - 停止调用 didReceiveRemoteNotification 之前的 CKSubscription 推送通知限制

我在 iOS 11.4.1 上有一个 CloudKit 应用程序,经常通过 CKSubscriptions 更新记录。我发现在设备长时间(30 分钟到 2 小时)停止接收任何通知之前收到的推送通知的数量是有限制的。

有没有人遇到过这个问题?该应用程序处于活动状态,并且可以很好地接收来自 CKSubscriptions 的推送通知,但是在 3-5 分钟内收到 30-40 条通知后,它就停止接收它们。

甚至没有调用 didReceiveRemoteNotification。我在通话期间激活了 activityIndi​​cator。我还为每个 didReceiveRemoteNotification 调用了 completionHandler(.newData)。

大约 30 分钟到 2 小时后(应用程序始终处于活动状态),didReceiveRemoteNotification 开始再次调用记录更改。

我是否接近使用 CKSubscriptions 推送通知的一些限制?

我已经对此进行了彻底的测试,它与互联网连接无关,因为设备仍然可以向 CloudKit 发送更新,但没有收到推送通知。

我尝试过的: 1)限制我的保存 CKRecords 方法,以便将记录批量保存。不幸的是,每个记录更改都会调用一次 didReceiveRemoteNotification,所以同样的问题。2) 在开发和生产(从 App Store 下载)环境中发生 3) abort() 并重新打开应用程序不起作用 4) 尝试了 Apple 的 CloudShares 示例应用程序。我自己无法添加很多记录,但是当我的应用程序暂停推送通知时,CloudShares 应用程序仍会收到推送通知。5)最后,我在 didReceiveRemoteNotification 方法上尝试了一个计数器(没有调用任何数据更新方法),它在停止之前达到了大约 80-95。

谢谢!

0 投票
1 回答
77 浏览

ios - 我是否需要增量获取 CloudKit 更改以及订阅?

我正在尝试实现 CloudKit 订阅。以前我只是使用CKServerChangeToken我的应用程序启动时和应用程序中的关键点从自定义区域获取。

我的设置纯粹使用私有数据库。

我只是想知道如果我转向使用订阅,是否还需要进行这种类型的获取?从我看到的文档中并不清楚。

而不是使用订阅查询,我正在使用CKSubscriptionOptionsFiresOnRecordUpdate并循环我所有的记录类型来注册通知。

0 投票
1 回答
416 浏览

ios - CloudKit,重新安装应用程序后,如何将我的订阅重置为当前记录状态?

我正在处理这样一种情况,即用户之前删除了该应用程序,现在又重新安装了它。

它击中了我的 delta fetch 功能,该功能正在接收很多旧的订阅通知,主要是删除。但不下载当前记录。

我现在添加代码以对每种记录类型执行提取以下载所有数据。

我想重置 delta fetch 服务器令牌,因此该应用程序不必处理旧订阅通知。但是我找不到如何做到这一点,也许这是不可能的。

0 投票
0 回答
78 浏览

ios - CloudKit 服务器将推送通知发送到最大值。500 台设备

我已经基于 CloudKit 公共数据库中的插入发布了带有推送通知的应用程序。在 TestFlight 测试期间一切都很好——设备收到了通知(包括我自己的)。

在 App Store 发布后,我注意到我和我的朋友拥有的设备都没有收到通知。该应用程序已在超过 14 万台设备上更新。

当我使用设置为“生产”的授权密钥调试应用程序时,com.apple.developer.icloud-container-environment只有当我将密钥插入...开发环境时,我才会收到通知。

我的应用程序使用静默推送通知从数据库中获取记录,但它在生产环境中查找它;)

编辑:同时,我已经发布了应用程序的更新,现在应用程序不会从数据库中获取任何内容,因为实体中的所有必填字段都附加到通知中。我认为,可能超出了公共数据库请求限制。

无论如何,我已经检查了 CloudKit 仪表板中的遥测部分,看起来它可以在某个神奇的时间段内发送最多 500 个通知:

CloudKit 仪表板的屏幕截图

过去 24 小时在数据库中有许多插入:

在此处输入图像描述

一些插入根本没有触发推送。

当然,我家中的所有设备都没有收到通知。任何想法为什么会发生这种情况?CloudKit 推送通知是否有任何未记录的限制?

0 投票
1 回答
61 浏览

ios - 如何使用CKNotification?

我想在 cloudkit 上的值更改时收到通知

这是我的代码:

0 投票
1 回答
40 浏览

ios - 使用 CloudKit 共享时如何正确使用数据库订阅

我正在研究如何处理 CloudKit 共享和数据库订阅,我需要帮助了解 Apple 如何在我们可用的属性和委托方法的情况下一起使用订阅和 CloudKit 共享。

这个线程非常相似,但没有将共享带入等式,并且在功能方面与我设置的有点不同。

设置潜艇是容易的部分。如果没有订阅,请设置一个。如果所有者停止共享,则会调用一个委托方法,因此您可以删除除您自己之外的所有子项。当参与者离开共享时,我的问题就出现了。应该删除与该人关联的订阅,但他们现在无权访问共享数据库来执行此操作。而且我看不到将订阅与参与者 ID 相关联的方法。我能弄清楚如何做到这一点的唯一方法基本上是其他线程中提到的。创建一个新的订阅记录类型,将参与者 ID 索引到订阅 ID。

从概念上讲,我倒退了,并假设每个用户都对自己的潜艇负责。使用新的 recordType 会翻转,因此共享所有者对所有订阅者负责。

这真的是这样做的方法吗?任何使用共享的人都会遇到这种情况,所以我认为应该有某种方法可以在不创建另一个记录类型的情况下处理它?

0 投票
1 回答
116 浏览

swift - CKQueryNotification.recordID:无法识别的选择器发送到实例

我正在尝试设置静默推送通知以使用 CloudKit 在设备之间传播本地通知,但我无法理解为什么每次收到远程通知时我的应用程序都会崩溃。

在我尝试处理收到的通知之前,一切正常。尝试访问 didReceiveRemoteNotification 中的 CKQueryNotification 对象的 recordID 时发生崩溃。

我正在应用程序 didFinishLaunchingWithOptions 中注册远程通知。这是其余的代码:

在 didRegisterForRemoteNotification 中,我正在为记录类型 CD_Task 创建一个 CKSubscription。

在 DidReceiveRemoteNotification 内部,我将一个 CKQueryNotification 对象传递给一个函数来处理从 iCloud 接收到的远程通知:

最后,这里是 iCloudHandleNotification 函数代码:

编辑:

经过调查,似乎我得到的是 CKDatabaseNotification 而不是 CKQueryNotification——我应该如何指定我想要一个 CKQueryNotification?

0 投票
1 回答
250 浏览

swift - 没有在 MacCatalyst 上调用 didReceiveRemoteNotification

当我创建 CKSubscription 时,在 iOS 上调用 didReceiveRemoteNotification 就好了,但在 MacOS 上却不行。我遇到了一个 2015 SO 线程谈论错误,建议的解决方法是将通知信息的 soundName 设置为空字符串 - 不幸的是,这并没有解决我的问题。

以下是我注册远程通知的方法:

0 投票
1 回答
82 浏览

ios - iOS 模拟器永远不会收到来自 CloudKit 服务器的通知

重要提示:问题不是关于模拟通知,而是关于从 CloudKit 服务器接收真实通知并获得工作同步。

模拟器上的通知永远不会触发,即使应用程序启动,我也无法很好地测试我的应用程序。具体来说,我已经订阅了 CKDatabaseSubscription。任何人都知道如何允许模拟器上的通知获得工作同步?

我只在真实设备上接收通知并且有工作同步,它在那里完美运行。