Xamarin.Forms iOS - 当设备连接到互联网时开始上传数据,即使应用程序当前未处于活动状态或处于后台

Xamarin.Forms iOS - start uploading data when device gets internet connectivity even when app is not currently active or is in the background

我有一个 Xamarin.Forms 应用程序,用户可以在其中创建 "listings",然后将它们发送到服务器(Http api 调用)。我们的一个用例是用户创建了一个列表,但目前没有互联网连接,因此列表将处于 "pending" 状态。然后,用户可以将应用置于后台(不再处于活动状态)。在稍后的某个时候,用户现在可以连接互联网,我希望该应用程序自动发送那些待处理的列表,而无需用户再次打开该应用程序。

我目前正在 Xamarin.Forms 应用程序的 iOS 实现中寻找解决此问题的方法,并且还需要对 Android 实现做类似的事情。

我已经查看了 iOS 的 Background Fetch,但目前似乎很少调用 PerformFetch,即使我将间隔设置为 backgroundfetchminimum,因此它可能不够可靠。 我还阅读了 iOS 文档,PerformFetch 上的代码不应 运行 超过 30 秒,否则它会得到 "penalized" 并进一步限制间隔。列表可以附加大图像或视频,发送所有这些肯定需要 30 多秒。

NSUrlSessionUploadTask 处理连接问题。如果之前的任务出错,您还应该实施 didCompleteWithError 处理程序并再次对相同的上传进行排队。

Rob Gibbens 的 github example 很不错。他实现了 NSUrlSessionDownloadTask,但您将使用 NSUrlSessionUploadTask 来代替相同的方法。

考虑使用 MessagingCenter 让您的项目中的代码更整洁。