我正在指定一个iOS应用程序(它将在我们公司之外构建),它将把用户的数据输入上传到服务器。如果设备没有连接到Internet,我们希望将数据保存在设备上,并在网络重新连接时将其上传。(该应用程序将主要运行在iPod触控设备上,这些设备将在大部分时间被断开连接)。
如果用户打开设备并在网络重新连接后重新打开我们的应用程序,那么上传到服务器应该很容易,因为应用程序正在运行。
但是,如果应用程序没有运行,那么“不运行”可能意味着一个或多个:
在上述情况下,是否有一种方法(理想情况下是一种电池效率高的方法)来确保本地数据在恢复互联网连接后立即上传?根据以上哪种情况导致应用程序不运行,答案是否不同?
该设备是否需要一个最低的iOS版本,以便在应用程序不运行时,允许某些(或所有)以上未运行的情况仍然上传?
如果这些都是明显的新手问题,我很抱歉--我不是iOS专家。
发布于 2012-09-05 13:43:26
除其他外,内锥度和News.me(该技术的先驱)使用了一种有趣的技术,您可以使用区域监视来启动背景下载或上传。马可(Instapaper)在博客上写了个博客,并(在第80集的构建和分析播客上)谈论了他与苹果公司的沟通,所以这应该是应用商店里允许的。
简单地说,技术是设置某些区域(地理位置),如"home“或"work”,并响应locationManager:didEnterRegion: (和类似的)回调。一旦你进入预先指定的区域,你的应用程序就会从背景中苏醒过来,你可以检查是否有任何数据要上传。
这种技术不能保证数据在网络重新连接时被上传,但是当iPod触摸用户回到他们的WiFi网络时,它将允许您的应用程序自动上传信息。
这最有可能是每天至少一次,这可能是或可能不够频繁,对你来说。您可以在尝试初始上载时向其添加时间戳,并在上传成功后发送时间戳,以获得服务器上事件的正确顺序(数据条目)。
发布于 2012-09-05 03:19:00
没有办法确保这一点。如果您的应用程序“不运行”(根据您问题中描述的定义),它将无法响应设备网络状态的更改。应该设置它,以便下次应用程序再次运行时恢复上载操作。
编辑:您描述的一些案例确实为您的应用程序提供了不同的机会。具体来说,如果用户通过按home按钮“退出”应用程序,或者在前台启动另一个应用程序,您的应用程序可能会继续在后台运行,并可能对网络可达性的变化作出响应。
在后台和在多长时间内所做的事情的性质已经有了很好的记录,并且得到了任何支持多任务处理的iOS版本的支持。我建议您查看与应用程序状态和后台服务相关的文档。
发布于 2012-09-05 13:12:36
关于多任务处理,苹果说:
从开发文档中引用重要引文:
您的应用程序委托的applicationDidEnterBackground:方法大约有5秒来完成任何任务并返回。在实践中,这种方法应该尽快返回。如果这个方法没有在时间耗尽之前返回,那么你的应用程序就会被杀死并从内存中清除。如果仍然需要更多时间执行任务,请调用beginBackgroundTaskWithExpirationHandler:方法请求后台执行时间,然后在辅助线程中启动任何长期运行的任务。无论是否启动任何后台任务,applicationDidEnterBackground:方法仍必须在5秒内退出。
https://stackoverflow.com/questions/12224336
复制相似问题