【问题标题】:How to perform a simple background task on Xamarin iOS如何在 Xamarin iOS 上执行简单的后台任务
【发布时间】:2020-02-08 01:23:59
【问题描述】:

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

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

简而言之,我如何在 iOS 9-13 上实现这一点?

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

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

但是,这只会给任务 2 分钟的运行时间,这还不够。我查看了 NSURlSessions,但它们需要 URls,而我们使用的是我们自己的 API 包装器。

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

谢谢。

【问题讨论】:

标签: c# ios xamarin background-task


【解决方案1】:

即使应用已安装,此服务也会继续同步旅程 进入后台甚至关闭。

首先,如果你的应用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

【讨论】:

  • 我已经阅读了所有 Xamarin 文档,但我的请求并不真正适合任何类别。我想要的只是创建一个可以运行的任务,这样用户就不必等待他们的旅程同步。当然这可以通过某种方式实现吗?我不能是唯一符合这个条件的人。
  • @Jhardy 如果同步操作在后台需要很长时间,Apple 将不允许将此作为​​文档中写入的时间限制。
  • 好的,谢谢,该任务最多需要 5 分钟,具体取决于旅程的长度。似乎唯一的解决方案就是让用户坐下来等待。
  • Apple 对 iOS 中的后台任务总是很严格。如果对您有帮助,您可以投票/标记答案。
  • 是的,它代表 Apples 似乎有点过头了,但是哦,好吧。谢谢。赞成。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    唯一的选择是在您希望更新应用时发送推送通知。

    就是这样,我理解你的愿望,但这只是一个愿望,而不是真实的东西。

    【讨论】:

    • 应用程序没有更新,我只是想在后台运行一个任务,这样用户就不必坐下来等待他们的旅程与应用程序打开同步。苹果真的那么严格以至于达不到吗?
    • 您阅读 PerformFetch 描述了吗?它从字面上说明了您在上面所说的内容。是的,这是 iOS 上的唯一方法。
    • 后台获取 - “以系统确定的时间间隔从后台刷新应用程序”。我不会定期刷新应用程序,用户正在启动任务。这可以是每天、每隔一天或每周一次。似乎是 iOS 让用户等待旅程同步的唯一选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多