ios - 接收远程通知时如何唤醒未运行的应用程序
问题描述
现在我有一个接收静默通知的框架,从中获取数据(自定义数据)并将其转换为本地通知以向用户显示警报(这是 didReceiveRemoteNotification:fetchCompletionHandler 方法中的 donde)。我已经在一个应用程序上实现了这个框架,一切似乎都正常工作,当应用程序处于后台和前台时,正在处理静默通知。但是,当应用程序被用户杀死或未运行时,我无法收到通知,因为:
使用此方法为您的应用处理传入的远程通知。与 application:didReceiveRemoteNotification: 方法不同,该方法仅在您的应用程序在前台运行时调用,系统在您的应用程序在前台或后台运行时调用此方法。此外,如果您启用了远程通知后台模式,系统会启动您的应用程序(或将其从挂起状态唤醒)并在远程通知到达时将其置于后台状态。但是,如果用户强制退出,系统不会自动启动您的应用程序。在这种情况下,用户必须重新启动您的应用程序或重新启动设备,然后系统才会再次尝试自动启动您的应用程序。
我使用此方法显示通知的原因是因为我发送到 APNS 的有效负载具有自定义数据,其中包含指示通知必须如何表现的键值。
我一直在做一些研究,我发现用于 VoIP 的 Pushkit 可以完成这项工作。但是,许多帖子表明这可能会导致应用被拒绝。
所以我的问题是,即使我的应用程序被杀死并且考虑到有效负载中的数据具有构建通知的自定义信息,我如何才能实现接收远程通知?
解决方案
静默推送通知是不可靠的:它们可能会延迟、成组发送甚至根本不发送。
如果您需要在向用户显示横幅之前修改通知的内容,您应该使用Notification Service App Extension。您还可以在您的应用程序和此扩展程序之间共享一些信息 - 使用应用程序组或钥匙串 - 如果它需要您的应用程序中的某些内容来处理通知数据。
推荐阅读
- r - 绘制时间序列图并从 24 小时转换为 12 小时
- java - 如何使用 java 在 GridView 中进行搜索?
- c++ - 在开始而不是结束时使用 '\n' 有什么缺点吗?
- symfony - 如何在不使用 docker_compose.yml 的情况下在 symfony 5.2 上正确配置 RabbitMQ、messenger 和 amqp?
- python - 测试准确度等于训练准确度
- list - 如何在颤动中使用小部件映射列表
- vba - TransferSpreadsheet 错误 3251 操作不支持
- typescript - 如何在 VSCode 扩展中检测 TypeScript 初始化时间?
- redux - 将 Google Auth userId 关联到我的 MERN 堆栈
- xml - 在 spark 中分解多个数组列以更改输入模式