如何在Xamarin iOS上执行简单的后台任务

时间:2019-10-10 14:45:52

标签: c# ios xamarin background-task

在我们的应用程序中,用户可以跟踪和提交他们记录的旅程。我需要一种在iOS中创建任务的简单方法。我已经在Android上创建并测试了它。通过以下方式起作用:

  • 用户选择他们想要提交的旅程。
  • 点击同步并创建一个前台服务,将旅程同步到我们的API。
  • 即使该应用被置于后台甚至关闭,该服务仍将继续同步旅程。

总之,我如何在iOS 9-13上实现这一目标?

我已经尝试使用以下方法创建后台安全任务:

nint taskID = UIApplication.SharedApplication.BeginBackgroundTask(()=> {});

但是,这仅使任务运行2分钟是不够的。我研究了NSURlSession,但是它们需要URls,而我们使用的是自己的API包装器。

我只想在用户点击“同步”时创建一个任务,并且该任务也能够在后台运行。如果在关闭应用程序后取消任务,我不会太在意,尽管在可能的情况下希望任务继续进行。

谢谢。

3 个答案:

答案 0 :(得分:0)

我建议您利用Shiny来实现它。

答案 1 :(得分:0)

PerformFetch是最接近您要求的内容,它将在后台运行并在iOS认为需要时更新您的应用程序(它预测,根据以前的行为,用户很快就会打开您的应用程序并且新的内容可用)。

唯一的替代方法是在您希望更新应用程序时发送推送通知。

仅此而已,我理解您的愿望,但这仅仅是-一个愿望,而不是真实的事情。

答案 2 :(得分:0)

  

即使已放置该应用程序,该服务仍将继续同步旅程   进入后台甚至关闭。

首先,如果您的应用is closed在iOS中,我确定不能在后台运行任何服务。

然后,如果您的应用is put into background,则Apple有严格的限制,允许应用在后台运行。 background-tasks有时间限制,您可以阅读文档了解更多信息。有一个有关handling-background-task-time-limits的部分,您可以尝试一下。

此外,Apple允许某些特定的应用程序在后台运行,这些应用程序必须在后台执行任务。例如,需要在后台play music,在后台update location等的应用。您可以看到Application Registration Categories here。如果您的应用满足该要求,则可以从系统中申请后台运行许可。

引用:Backgrounding in Xamarin.iOS