通过 Parse 为 iOS 安排和取消推送通知

Scheduling and canceling push notifications for iOS via Parse

我有一个与 Parse.com 集成的 iOS 应用程序,我想在其中为某些 dates/times 安排推送通知。我在 PFInstallation 对象上为有即将发生的事件的用户存储推送通知时间。我在 Parse CloudCode 上有一个预定作业 运行,它查询需要在下一分钟内发送的推送通知时间。 这是构建它的好方法吗?如果是这样,我如何发送此推送? Parse.Push 对其 where 字段进行查询,但仅查询 return 最多 1000 个结果,这些结果无法按比例缩放一切为了一个免费的应用程序。因此,我正在尝试使用具有无限数量结果的 Parse.query.each() 。但是,现在我不确定如何以这种方式向每个安装发送推送?我是否需要在我的 each() 语句中创建另一个查询?这似乎是多余且低效的。

(请注意,推送通知是设置了内容可用标志的静默通知,因此本地通知不是一种选择。用户也可以取消通知,因此使用 CloudCode 推送计划安排通知 API 不是一个选项,因为 those pushes can't be cancelled。)

您说,您将推送通知时间存储在相应的 PFInstallation 对象上,以避免缺少通过 Parse 取消推送通知的支持,太好了。我们将该列称为 ScheduledPushDate;那是容易的部分; +1。您想要完成的部分实际上是使用给定日期安排推送通知。伟大的。另一个简单的部分; +1。困难的部分是按照你想要的方式去做; -2。 Parse.Push不仅限于where字段。发送推送时有很多变量发挥作用,例如,Parse 甚至不考虑任何没有有效 deviceToken 的对象,因此您可以立即忽略这些对象。 运行 遇到的问题不是推送本身,也不是如何查询验证,而只是取消推送。当然,您始终可以将 ScheduledPushDate 中的日期更改为 2025 年的某个日期,或者干脆将其完全否定,但这并不重要,因为您已经为通知指定了有效负载的预定日期。保持简单,并根据您的目标(您标记为 iOS,因此这是专门针对客户端资源的答案,因为您不想使用本地通知或云代码)您将无法取消它,因为在给定的指导方针内,您只能使用 Parse(客户端、云代码、仪表板)以多种方式构建推送通知,并且截至目前,只有这些选项中的一个可以成功取消过程,它是通过 dashboard/console。

假设您按照自己的想法去做:

  • 执行预定作业以搜索需要在下一分钟内触发的推送时间。什么是"coming minute"。假设用户时间是 11:35.46 (11am35m46sec),他们想取消预定的通知并在那一刻取消了它,但是您的工作是在 11:35.00 时解雇的?实际上,这种情况发生的频率不多,但它会发生并且可能发生。您应该始终针对用户将遇到的每一种情况进行编码,而不仅仅是您想要防止的情况。
  • 此外,如果您确实拥有上述的可扩展应用程序,您将用尽几乎所有 API 请求限制。
  • 最后,为了回答您的问题,您不必在 query.each 函数中执行 innerQuery 或其他查询,因为它的工作是 iterate over each result of a query