如何使用后台模式从本地 Web 服务器创建本地通知

Posted

技术标签:

【中文标题】如何使用后台模式从本地 Web 服务器创建本地通知【英文标题】:How to create local notifications from local web server with Background Modes 【发布时间】:2019-10-04 14:54:58 【问题描述】:

我正在开发一个与本地 Web 服务器通信并从它(通过 WebSockets 或 HTTP)接收数据而不使用互联网连接的应用程序。

因此,即使 iPhone 处于待机状态,我也需要找到一种在不使用 Apple Push Notifications 服务的情况下从服务器接收推送通知的方法,以便通知显示在 Apple Watch 上。例如,我的想法是将数据从服务器发送到 iPhone 客户端,然后在本地创建通知。为此,我需要在后台运行我的应用,但我发现的模式无法帮助我。

-运行任意一段代码:例如,我可以在按 Home 后在后台运行应用程序最多 3 分钟。如果可能的话,我需要让应用程序“永远”在后台执行,以便从服务器接收数据并进行处理。

-后台获取:此模式不可靠,因为我无法控制何时执行我的代码,但 ios 会根据用户的行为和其他条件来决定。

我阅读了有关静默推送通知、VOIP (PushKit) 的信息,但我不明白您是否需要 APN 才能使它们正常工作。

这篇文章是否也描述了静默推送通知? https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app#see-also

如果是,那么我每小时使用静默推送通知的次数不能超过 2/3 次,而且它被认为是低优先级,不可靠...

这里说从 iOS13 开始我不能再对非 VOIP 应用程序使用 VOIP 模式:Can I use PushKit to do regular push with out using VoIP? Will it allow killed app to be launched in background if user does not act on notification?

如果您无法访问互联网并根据事件在后台唤醒应用程序,是否有一些方法可以绕过 APN?

谢谢:)

【问题讨论】:

【参考方案1】:

所有 PushNotifications(包括静默)都是通过 APNs 传递的,也不例外。他们需要互联网连接才能工作。所有这些都被认为是“尽力而为”并且不提供任何保证。如果客户端不在线,每个应用程序将缓存 1 条通知,并在用户下次连接时尝试发送。如果在缓存一个通知时另一个通知进入 APN,第一个通知将被删除并且永远不会发送给用户。

您在本地创建的称为 LocalNotifications,显然不需要互联网连接。

您可以使用静默通知来触发应用程序唤醒并执行少量工作,然后可能会在必要时触发本地通知。但是正如您提到的,您可以使用它的频率存在限制,并且仍然无法保证。

没有办法让应用程序永远在后台运行。在后台运行网络代码非常消耗电池,因此被阻止。您所指的模式也是执行此操作的唯一方法(无需越狱)。在后台运行代码的唯一选项是使用后台应用程序刷新,每 X 请求 30 秒的时间(其中 X 由系统决定,可能是几分钟,可能是几小时,可能是几天……取决于用户的使用情况您的应用程序和其他人的)。也可以在 iOS 设置中为每个应用禁用后台应用刷新。

我不确定您的用例是什么,但您描述的功能是不可能的。我不知道是否可以选择使用 SMS 网关来发送短信,因为它们将具有更高的 SLA,并且不需要互联网连接。但与 APN 不同的是,它不是免费的。

【讨论】:

以上是关于如何使用后台模式从本地 Web 服务器创建本地通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 后台运行服务以接收本地通知?

iOS 本地通知 - 在后台时回调

从后台安排本地通知(Ionic + ngCordova)

当应用程序从后台删除时停止本地通知

当应用程序进入暂停状态时取消本地通知。(从后台删除)

从后台注册本地通知