【问题标题】:iOS Push Notification Service Extension Not Consistent WorkiOS 推送通知服务扩展不一致的工作
【发布时间】:2019-02-01 23:16:06
【问题描述】:
  • 在我们的应用程序中,我们使用推送通知通知用户,但如果用户没有 收到推送(例如用户的设备离线),然后我们向他发送短信。
  • 由于 APNs 不提供交付报告,我们已经实现了自己的 使用服务扩展后端服务器发送报告的方法:

    • 当应用收到推送通知时,它会在服务扩展的方法中向后端发送一个 http-request -

      didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)

只能在 30 秒内进行 fetch 作业或发出 http 请求。

但是,有时用户会抱怨同时接收 SMS 和 PUSH。

当我们检查 DB 中的日志时,没有来自这些设备的 PUSH 传递报告。

我的问题是:

  1. Service Extension 是否有可能无法启动?
  2. 有关如何解决此类错误的任何建议?

【问题讨论】:

  • 你找到解决办法了吗?

标签: ios apple-push-notifications unnotificationserviceextension


【解决方案1】:

在服务扩展中打电话回家的想法是有缺陷的,因为如果由于某种原因 HTTP 调用在扩展中失败(例如,坏的单元格接收,服务器打嗝,......)你没有办法阻止通知被传递:

服务扩展 [..] 无权删除此通知或阻止其显示。

正如本次 WWDC 17 演讲中所述:Best Practices and What’s New in User Notifications

更好的方法是向用户发送silent notification。这将在用户设备的后台唤醒您的应用程序,允许您进行 HTTP 调用。如果呼叫成功,您可以安排本地通知。如果失败(或者如果从未发送过静默通知),则用户处于离线状态,您可以改为发送 SMS。

请记住:Apple 将静默通知视为低优先级,因此为了防止在发送 SMS 之后发送的静默通知安排本地通知,您应该实施某种形式您的应用可以使用 API 调用来查询是否已发送 SMS。

【讨论】:

    【解决方案2】:

    在您的应用中,您可能在应用的目标功能中启用了后台模式远程通知以及服务扩展。所以发生的事情是,当您收到推送通知时,您的应用程序处于活动状态大约 30 秒。在这段时间内,您的送货服务会被调用并更新您的服务器。由于通知不包含任何媒体,因此需要一些时间才能显示通知。

    但是,一旦您收到货品,您的服务器就会向用户发送一条短信。这就是您同时获得 APN 和 SMS 的原因。

    修复:在您的服务器上添加大约 1 分钟的 SMS 发送延迟。以免发生冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多