ios - 在 iOS 上运行小型周期性高优先级后台任务

标签 ios iphone swift background-process

我正在开发的应用程序提供 VPN 连接,即使应用程序根本没有运行,该连接也可以运行。这项服务是付费的,但我也想提供免费试用,但受 session 长度和传输最大数据量的限制。

我遇到的问题是当应用程序处于后台或根本不运行时监视传输的数据。到目前为止,我想出的最佳解决方案是定期运行小任务来检查用户是否仍在数据限制内,如果不在数据限制内,VPN 将断开连接并向用户显示通知。

每次需要时,静默通知都会优先吗?根据developer.apple.com的引用,它们的优先级较低,这不是我所需要的,但我无法找到其他任何东西。

Silent notifications are not meant as a way to keep your app awake in the background, nor are they meant for high priority updates. APNs treats silent notifications as low priority and may throttle their delivery altogether if the total number becomes excessive. The actual limits are dynamic and can change based on conditions, but try not to send more than a few notifications per hour.

如何才能可靠地做到这一点?还有其他办法吗?

最佳答案

如果这是个人 VPN 连接(即您只是向标准系统提供配置)并且您不在流程中,则这是不可能的。故意没有“我希望我的程序一直运行”的解决方案。即使你想出了一个,苹果也可能会关闭你。

如果您正在编写 MDM/受监督的 VPN 连接(即您提供自己的 ...Flow 对象),那么您已经一直在运行,并且可以只要你想控制它就可以了。我假设您有前者,否则您不会问。

我相信你正在做相反的事情。监视服务器上的 session 长度,并在那里断开连接。当您断开连接时,发送推送通知,无需打开应用程序即可直接显示消息。这是既可靠又符合预期的解决方案。

定期发布无声通知来叫醒自己肯定是行不通的,因为苹果明确不希望你这样做,并且他们明确地打破了它(正如他们指出的“无声通知并不是让你的应用程序保持清醒的一种方式”)。的背景”)。这对电池生命周期不利。此问题旨在在您的服务器上、用户的设备上解决。

关于ios - 在 iOS 上运行小型周期性高优先级后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46426717/

相关文章:

iphone - 如何优化绘制 map 叠加层的代码

iphone - 重复符号

ios - 如何在 swift 中设置 AppDelegate 进行推送通知

swift - 在 Swift 函数设计中什么时候应该有参数标签,什么时候应该省略参数标签?

android - 在phonegap中打开软键盘时,showkeyboard/hidekeyboard事件不会在ios 7上触发

iphone - 是否有涵盖 SDK 5.1 或 Xcode 4 的 iPhone 和 iPad 开发的首个版本?

ios - 将 Firebase 数据合并到 TableView 中

iphone - 如何在 Storyboard中创建 UIViewController 布局,然后在代码中使用它?

java - 如何将图像(UIImage)从 SWIFT ios 客户端程序发送到 JAVA 服务器程序?

ios - 为什么导航 Controller 在 - (BOOL)shouldPerformSegueWithIdentifier : is implemented? 时不工作