iOS推送通知服务扩展不一致工作

时间:2018-08-27 12:02:47

标签: ios apple-push-notifications unnotificationserviceextension

  • 在我们的应用中,我们使用Push-notifications通知用户,但是如果用户没有 收到推送(例如,用户的设备离线),然后我们向他发送短信。
  • 由于APN不提供投放报告,因此我们已实施了自己的报告 使用服务扩展将报告发送到后端服务器的方法:

    • 当应用收到推送通知时,它会在Service Extension的方法内向后端发送一个http请求-

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

仅在30秒内可以进行提取作业或发出http请求。

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

当我们检查数据库中的日志时,这些设备没有PUSH传递报告。

我的问题是:

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

2 个答案:

答案 0 :(得分:0)

在您的应用中,您可能已在应用的目标功能中启用了背景模式远程通知以及服务扩展。因此,发生的是,当您收到推送通知时,您的应用程序处于激活状态约30秒。此时,您的交付服务将被调用并更新您的服务器。由于通知不包含任何媒体,因此显示通知会花费一些时间。

但是,一旦您收到邮件,服务器就会向用户发送SMS。因此,这就是为什么您同时获得APN和SMS的原因。

修复:在您的服务器上增加大约1分钟的发送SMS延迟时间。为了避免冲突。

答案 1 :(得分:0)

在服务扩展内拨打电话的想法存在缺陷,因为如果由于某种原因HTTP调用在该扩展内失败(例如,不良的信元接收,服务器打,等),您将无法阻止传递通知的原因:

  

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

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

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

请紧记:Apple将静默通知视为低优先级,因此,为了防止发送短信后 发送的静默通知安排本地通知,您应该实施某种方式您的应用可用来查询API调用的数量。