【问题标题】:How are push notifications delivered through APNS when app is completely closed?当应用程序完全关闭时,如何通过 APNS 传递推送通知?
【发布时间】:2020-03-17 13:46:55
【问题描述】:

我正在开发一个处理静默通知的框架,以便部署本地通知(带有警报),原因是我从 Firebase 发送数据消息,其中有效负载具有自定义键值对(表示通知的行为方式),所以我必须在应用程序中接收它们才能翻译它们。

一切正常,我在应用程序执行时在前台和后台接收通知。问题是当应用程序被用户杀死或完全关闭时,我无法收到通知。原因在 Apple 文档中指出,如果用户关闭应用程序,didReceiveRemoteNotification:fetchCompletionHandler 将不会被执行,因为系统不会启动应用程序。

所以,有人告诉我,即使应用程序关闭,我也应该使用默认的 apns 键值对来接收默认推送通知,如果我想修改或添加某些内容到收到请求的通知中,请使用通知服务扩展的内容。

我遇到的问题是,当我收到静默通知时,我应该做一些额外的处理,比如报告我收到了它。这就是我认为应用程序应该执行的原因,因为它需要执行时间。

但我一直在思考和研究,我无法理解其他应用程序(如 youtube、facebook .. 等)即使关闭应用程序也能接收带有图像附件的通知,难道不应该为了添加附件您需要在本地附加任何内容吗?所以您应该以某种方式下载它,并且此过程需要应用程序有时间执行该任务,还是由 IOS 管理?

或者我错过了关于推送通知的一些内容?

【问题讨论】:

  • 无论应用程序是否打开,都可以显示“标准”远程通知。这一切都由操作系统处理,与本地预定通知相同。 iOS 知道如何处理它们,因为它可以显示所有需要的信息。
  • @Scriptable 很好,现在我明白了。如果我必须在通知到达时向端点发送请求怎么办?我的意思是我已经实现了,我收到了静默通知,并使用我收到的有效负载将其转换为本地通知。有没有办法通过普通通知来做到这一点?,因为正如你所说,当应用程序未打开时可以显示标准远程通知,但考虑到我必须将此信息发送到端点,我无法在应用程序时做到这一点完全关闭,因为我需要执行时间,但通知将被显示,我说得对吗?
  • 当收到标准远程通知并且应用程序打开时,应用程序将收到通知,如果应用程序被终止,则不会。但如果用户点击通知,应用程序将启动,并且 launchOptions 将包含通知中的 APNS 数据

标签: ios push-notification apple-push-notifications silent-notification


【解决方案1】:

iOS 10 引入了“丰富通知”的概念。是的,它最终是通过常规推送通知传递的。但它包含指向图像(或其他媒体/数据)的链接。

在您的应用中创建一个“通知服务扩展”允许您在通知传递时运行代码,例如下载通过有效负载中的“媒体 URL”传递的图像。

您还可以创建“通知内容”目标以允许您自定义 UI,允许您扩展通知以显示 UIViewController 以显示其他数据/内容。

这里是一个入门教程的链接:https://medium.com/@tsif/ios-10-rich-push-notifications-with-media-attachments-a54dc86586c2

【讨论】:

  • 即使我正在下载图像以将其添加到通知中,也无需打开应用程序即可执行此操作?如果不需要,什么处理图像下载? IOS?
  • @Rafael 我没有测试过,文档似乎表明它是可能的。正如我在回答中所说并在教程中列出的那样,您必须在您的应用程序中创建一个名为“通知服务扩展”的单独组件。这可能类似于 watchkit 扩展,当你下载应用程序时它会安装在手机上,但随后它会在系统中注册,代码会在其他地方运行
  • 我很感激它,只要我测试它,我会回来标记它作为答案。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多