首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保证在网络重新连接后上传,即使我的应用程序没有运行

保证在网络重新连接后上传,即使我的应用程序没有运行
EN

Stack Overflow用户
提问于 2012-09-01 02:04:02
回答 4查看 868关注 0票数 8

我正在指定一个iOS应用程序(它将在我们公司之外构建),它将把用户的数据输入上传到服务器。如果设备没有连接到Internet,我们希望将数据保存在设备上,并在网络重新连接时将其上传。(该应用程序将主要运行在iPod触控设备上,这些设备将在大部分时间被断开连接)。

如果用户打开设备并在网络重新连接后重新打开我们的应用程序,那么上传到服务器应该很容易,因为应用程序正在运行。

但是,如果应用程序没有运行,那么“不运行”可能意味着一个或多个:

  • 装置被循环供电
  • 用户把设备锁上了,它就在他的口袋里
  • app崩溃
  • 用户退出应用程序
  • 用户开始使用其他应用程序,因此我们的应用程序不再在前台运行
  • 还有其他的案子吗?

在上述情况下,是否有一种方法(理想情况下是一种电池效率高的方法)来确保本地数据在恢复互联网连接后立即上传?根据以上哪种情况导致应用程序不运行,答案是否不同?

该设备是否需要一个最低的iOS版本,以便在应用程序不运行时,允许某些(或所有)以上未运行的情况仍然上传?

如果这些都是明显的新手问题,我很抱歉--我不是iOS专家。

EN

回答 4

Stack Overflow用户

发布于 2012-09-05 13:43:26

除其他外,内锥度News.me(该技术的先驱)使用了一种有趣的技术,您可以使用区域监视来启动背景下载或上传。马可(Instapaper)在博客上写了个博客,并(在第80集的构建和分析播客上)谈论了他与苹果公司的沟通,所以这应该是应用商店里允许的。

简单地说,技术是设置某些区域(地理位置),如"home“或"work”,并响应locationManager:didEnterRegion: (和类似的)回调。一旦你进入预先指定的区域,你的应用程序就会从背景中苏醒过来,你可以检查是否有任何数据要上传。

这种技术不能保证数据在网络重新连接时被上传,但是当iPod触摸用户回到他们的WiFi网络时,它将允许您的应用程序自动上传信息。

这最有可能是每天至少一次,这可能是或可能不够频繁,对你来说。您可以在尝试初始上载时向其添加时间戳,并在上传成功后发送时间戳,以获得服务器上事件的正确顺序(数据条目)。

票数 7
EN

Stack Overflow用户

发布于 2012-09-05 03:19:00

没有办法确保这一点。如果您的应用程序“不运行”(根据您问题中描述的定义),它将无法响应设备网络状态的更改。应该设置它,以便下次应用程序再次运行时恢复上载操作。

编辑:您描述的一些案例确实为您的应用程序提供了不同的机会。具体来说,如果用户通过按home按钮“退出”应用程序,或者在前台启动另一个应用程序,您的应用程序可能会继续在后台运行,并可能对网络可达性的变化作出响应。

在后台和在多长时间内所做的事情的性质已经有了很好的记录,并且得到了任何支持多任务处理的iOS版本的支持。我建议您查看与应用程序状态和后台服务相关的文档。

票数 3
EN

Stack Overflow用户

发布于 2012-09-05 13:12:36

  • 设备被电循环->真的无法恢复,除非你打开应用程序!
  • 用户已经锁定了设备,它就在他的口袋里->应用程序applicationStatus is UIApplicationStateInactive,但它在后台运行。,您仍然能够对通知和加速度计事件作出反应。尝试Reachability类并记录更改!
  • 应用程序崩溃->不可能,除非打开App
  • 用户退出应用程序-> app是坐在后台。在这里,您有一个最大的10分钟限制 of 完全使用您的应用程序(如应用程序"Pastebot“所做的)
  • 用户开始使用其他应用程序,因此我们的应用程序不再在前台运行->与用户退出应用程序相同

关于多任务处理,苹果说:

  • 真正的多任务处理只适用于某些用途,因为有音频背景播放、VOIP (如Skype)、导航应用程序
  • 所有其他应用程序都可以在应用程序关闭后/在后台请求特定的时间,以完成某些任务(如发送电子邮件、短信或上载/下载重要数据)。

从开发文档中引用重要引文:

您的应用程序委托的applicationDidEnterBackground:方法大约有5秒来完成任何任务并返回。在实践中,这种方法应该尽快返回。如果这个方法没有在时间耗尽之前返回,那么你的应用程序就会被杀死并从内存中清除。如果仍然需要更多时间执行任务,请调用beginBackgroundTaskWithExpirationHandler:方法请求后台执行时间,然后在辅助线程中启动任何长期运行的任务。无论是否启动任何后台任务,applicationDidEnterBackground:方法仍必须在5秒内退出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12224336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档