2017-04-21 97 views
1

我在使用iOS上的背景技术时遇到了一些麻烦。首先,让我给一个简短的说明:在iOS中使用Xamarin.iOS(C#)创建背景:我应该使用哪种方法?

我为一家工作管理公司工作,该公司可以接收和分发工单查找工具。用户可以从我们的服务器上下载票据,处理它们,并将他们的回复发送回我们的服务器。下载的票据进入本地SQLite数据库,并且用户做出的响应存储在另一个本地SQLite数据库中。我的同事写的Android应用在Xamarin与C#和他的智能化进程,下载门票和上传回复如下:从我们的服务器

  1. 下载门票到本地SQLite数据库的“入场券”
  2. 检查当地的“回应”的SQLite数据库,看是否有做
  3. 反应订做的话有反应,将其发送到我们的服务器
  4. 等待5分钟
  5. 重复

这允许用户初始下载一批票并开始工作。如果此过程在用户没有互联网的情况下运行,则不会发生任何事情,并且定时器将重置。这个过程将允许用户在没有互联网的情况下对票据作出响应,并且每当他们有互联网时就会上传响应/下载新票券。

我的问题是,在iOS上,背景比在Android上限制得多。有后台提取,然后有推送通知。通过后台获取,系统“计算出运行PerformFetch方法的最佳机会”,并且不会给我必要的严格的5分钟计时器。通过推送通知,如果用户没有互联网,他们将永远不会收到推送通知。

我真的很希望能够像上面描述的那样简单地设置一个5分钟的定时器,并且让程序运行,检查是否有任何新票和发送任何新的答复,如果有任何礼物。但由于iOS背景的限制性质,我无法做到这一点。

有什么建议吗?他们会更感激。

谢谢。

回答

1

确实,你不能在Android应用程序中创建后台服务。但是在阅读完您的需求之后,似乎您并不需要后台服务来完成所有任务 - 只有当用户更新了脱机数据并关闭了应用程序时才需要它 - 当互联网连接再次可用时再也不打开。但是,这是iOS的限制,你无法在iOS中实现这一点。

对于其他任务,您可以在应用程序处于活动状态时从服务器异步获取数据。

您可以简单地创建5分钟计时器 - 只有在您的应用程序处于活动状态时才会运行。在那个时候,您可以执行代码来获取新票据并以异步模式向服务器发送响应。 Check here for more detail about how to do this in Xamarin

这个过程作为它的异步,不会干扰常规的UI活动。只要有互联网连接,用户就可以在数据库中检查新票,更新数据库中的响应等。