我在 iOS 后台运行时遇到了一些问题。首先,让我做一个简短的解释:
我在一家工作管理公司工作,该公司可以接收和分发用于定位公用事业的票证。用户可以从我们的服务器下载票证,对其进行处理,然后将他们的响应发送回我们的服务器。下载的票证进入本地 SQLite 数据库,用户做出的响应存储在另一个本地 SQLite 数据库中。我的同事用C#在Xamarin中编写了Android应用程序,他的智能下载票和上传响应的过程如下:
- 从我们的服务器下载门票到本地 SQLite 数据库,“门票”
- 检查本地“responses”SQLite 数据库,看是否有响应
- 如果有响应,将它们发送到我们的服务器
- 等5分钟
- 重复
这允许用户最初下载一批票并开始处理它们。如果这个过程在用户没有互联网的情况下运行,什么也不会发生,计时器会重置。此过程将允许用户在没有互联网的情况下对工单做出响应,并在有互联网时上传响应/下载新工单。
我的问题是,在 iOS 上,后台设置比在 Android 上限制更多。有后台获取,然后有推送通知。使用后台提取,系统“计算最佳机会”运行 PerformFetch
方法,并且不会给我必要的严格的 5 分钟计时器。对于推送通知,如果用户没有互联网,那么他们将永远不会收到推送通知。
我真的很想能够像上面描述的那样简单地设置一个 5 分钟的计时器并运行该过程,检查是否有任何新的工单并发送任何新的响应(如果有)。但由于 iOS 中背景的限制性,我不能这样做。
有什么建议吗?他们将不胜感激。
谢谢。
最佳答案
iOS App 确实不能像 Android 那样创建后台服务。但是在阅读了您的要求之后,您似乎并不真正需要所有任务的后台服务 - 只有当用户离线更新数据并关闭应用程序时才需要它 - 当互联网连接再次可用时永远不会再打开。但这是对 iOS 的限制,你无论如何都无法在 iOS 中实现这一点。
对于其他任务,您可以在应用处于事件状态时从服务器异步获取数据。
您可以简单地创建 5 分钟的计时器 - 只有当您的应用处于事件状态时它才会运行。那时,您可以执行代码以获取新票证并以异步模式向服务器发送响应。 Check here for more detail about how to do this in Xamarin .
这个过程是异步的,不会干扰常规的 UI 事件。只要有互联网连接,用户就可以在计时器上检查数据库中的新工单、更新数据库中的响应等。
关于c# - 使用 Xamarin.iOS (C#) : Which method should I use? 在 iOS 中设置后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43547736/