我正在指定一个iOS应用程序(将在我们公司之外构建),它将用户的数据条目上传到服务器.如果设备未连接到Internet,我们希望在设备上保存数据并在重新连接网络时上传数据. (该应用程序将主要在大多数时间将断开连接的iPod Touch设备上运行).
如果用户在重新连接网络后解锁设备并重新打开我们的应用程序,那么上传到服务器应该很容易,因为应用程序正在运行.
但是,如果应用程序没有运行,“不运行”可能意味着以下一个或多个:
>设备重启电源
>用户已锁定设备并将其放在口袋中
> app崩溃了
>用户退出了应用程序
>用户开始使用其他应用程序,因此我们的应用程序不再在前台运行
>还有其他情况吗?
在上述情况下,有没有办法(理想情况下是节省电池的方式)确保在恢复互联网连接后很快上传本地数据?答案是否有所不同,具体取决于上述哪些案例导致应用程序无法运行?
设备是否需要最低iOS版本,以便在应用程序未运行时仍能上传部分(或全部)上述未运行的案例?
如果这些是明显的新手问题我很抱歉 – 我不是iOS专家.
解决方法
有一种有趣的技术可供
Instapaper和
News.me(此技术的先驱)使用,您可以使用区域监控来启动后台下载或上传. Marco(Instapaper)在博客上发表了关于他与Apple沟通的博客(
episode 80 of the Build and Analyze podcast),因此它应该是App Store中允许的.
简而言之,该技术是您设置某些区域(地理围栏),如“home”或“work”,并响应locationManager:didEnterRegion :(和类似的)回调.进入预先指定的区域后,您的应用程序将从后台唤醒,您可以查看是否有任何数据要上传.
此技术无法保证在网络重新连接时上传数据,但是当iPod Touch用户回到WiFi网络时,它将允许您的应用自动上传信息.
这应该最有可能是每天至少一次,可能会或可能不会经常发生.您可以在尝试初始上载时添加时间戳,并在成功获取服务器上正确的事件顺序(数据条目)后沿上载发送该时间戳.