繁体   English   中英

用于在后台向服务器发送数据/重试请求的选项

[英]Options for sending data to server/retrying requests in background

我们正在开发一个企业应用程序,该应用程序将用户输入的表单数据发送到服务器。 用户点击保存后,该应用会尝试立即发送数据。 如果发送数据时出现问题(例如,没有网络连接),我们希望在X分钟后重试,并定期重试,直到成功发送数据为止。 请求通常不是很大或运行时间很长,但是用户经常处于无法访问网络的环境中,因此重试很重要。

它很简单,可以在应用程序运行时重试API请求,但是理想情况下,我们希望在应用程序在后台运行时保持定期重试。 使用iOS后台执行功能可以达到的最佳效果是什么? 这是我看到的一些选项:

  • 使用beginBackgroundTaskWithExpirationHandler:一次性请求额外的时间。 基本上,这将使我们在应用程序进入后台后再尝试发送一次数据,但不会重复尝试
  • 使用“后台获取”功能,并在唤醒应用程序进行后台获取时尝试将任何新数据发送到服务器。 从理论上讲听起来不错,但我担心这可能是滥用了背景获取功能?

这些是我最好的选择之一吗? 我还缺少另一种方法吗?

这是一个具有iOS和Android实现的Xamarin应用,尽管我认为这对我的问题没有重大影响; 我可以根据需要编写iOS特定的代码。

我认为您错过了一种方法: 后台NSURLSessions 我认为这是您应该使用的。

我真的不知道您可以拍摄多少张照片。 这是我的建议:

  • 当您开始后台下载时, beginBackgroundTaskWithExpirationHandler:开始后台任务(使用beginBackgroundTaskWithExpirationHandler:
  • 只要您的后台任务还没有过期,就可以在后台重启下载。
  • 如果调用后台任务到期处理程序,则需要立即结束后台任务。 此时,您的应用将停止执行,并且您的下载将在外部过程中继续进行。
  • 下载完成或失败后,您的应用将在后台重启,并有机会处理结果。 我不知道的是,您现在是否能够开始新的后台下载。 您应该尝试或等待比我更了解的人...

还请确保检查-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes; 委托方法,以便在下载失败并没有重新开始时重新开始下载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM