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

时间:2019-10-04 14:54:58

标签: ios swift websocket apple-push-notifications background-process

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

因此,我需要找到一种无需使用Apple Push Notifications服务即可从服务器接收推送通知的方法,即使iPhone处于待机状态也是如此,因此通知会显示在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?

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

谢谢:)

1 个答案:

答案 0 :(得分:0)

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

您在本地创建的被称为LocalNotifications,显然不需要Internet连接。

您可以使用静默通知来触发应用程序唤醒并执行少量工作,然后在必要时触发本地通知。但是正如您提到的,使用频率有一定的局限性,但仍然不能保证。

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

我不确定您的用例是什么,但是您所描述的功能是不可能的。我不知道是否使用SMS网关发送短信是一种选择,因为这些将具有更高的SLA,并且不需要Internet连接。但是与APNs不同,它不是免费的。

相关问题