12

我使用 NotificationService Extension 目标能够在推送通知出现之前对其进行修改。它运行良好,但有一些通知在处理后我不想呈现给用户。

我尝试将 bestAttemptContent 标题和正文设置为“”,但它会返回完整的通知。

我也尝试将 aps["content-available"] 设置为 1 并将 body 设置为 "" 但我得到了相同的效果。

4

1 回答 1

15

情况

实际上,我尝试实现与您相同的目标,即使用本地通知服务扩展管理将哪些类型的通知传递到特定设备。但是,我必须弄清楚这是设计使然...

  • ...您无法通过离散 api 取消通知。
  • ...如果您清空通知的内容,则通知将被传递,就好像从未调用过通知服务扩展一样。

这是因为 Apple 不希望您通过通知向用户的手机发送垃圾邮件(即使或尤其是在后台处理甚至未发送时),因为这可能会耗尽电池寿命,例如

解决方案

对于现在要做什么,您有四种可能的选择:

  • 使用静音推送。然后触发本地通知。注意:静默推送并不总是可靠的。
  • 使用VoIP 推送。这就是 WhatsApp 使用的方法,据我所知,它允许取消通知之类的事情。但是,Apple 在应用程序审查方面非常严格:只有 VoIP 应用程序才被允许使用 VoIP 推送(我猜这就是 WhatsApp 引入语音通话的原因,因为当通知服务扩展时,他们需要 VoIP 推送来在后台解密他们的消息在 iOS 9 下还不是一个选项)。
  • 通过仅向应该立即接收这些通知的用户发送通知来处理任何自定义取消逻辑服务器端。
  • 将通知文本操作为不为空但隐藏原始通知文本的内容。这可能很有用,例如,如果您发送推送说您的应用程序的专业版当前以折扣价提供:对于现有的专业用户,您只需编辑文本以阅读“感谢您成为专业人士。”。
于 2018-03-16T23:13:45.507 回答