最近要在iPhone上实现备份相册的功能。在分析之前,大家先看下下图,下图表示APP在不同情况下的运行状态。从图中可以知道,一旦APP到了后台(按HOME键),APP就会被挂起,即程序处于休眠状态,APP中的任何功能都不能运行。
因此如何使APP在后台也能运行,并将图片或视频上传的服务器上呢。这就是本篇所要阐述的。
对需求预研后,决定使用定位功能来实现(其它的方法不现实),分析如下:
1.标准的位置服务(Standard Location Service),此功能可以很好的满足需求,但不能通过苹果的审核。如果你想要使用此服务,你的APP中必须包含需要此服务的功能。我做过实验,被拒了,不要抱侥幸心理。因此这个方案只能放弃。
2.重大变化的位置服务(Significant-Change Location Service),相比标准的位置服务,苹果比较荐使用这个服务。但也蛮鸡肋的,一旦APP到了后台,就无法运行了。要通过一定距离来唤醒APP,即使唤醒后,APP在后台也只能运行很短的时间。
权衡以上内容后,决定使用重大变化的位置服务(Significant-Change Location Service)来实现后台备份功能。为了弥补不足,使用如下几个方法来增强此功能:
.后台任务(Background Task)功能,使用后台任务功能尽量延长APP后台运行时间,经测试可以使APP程序在后台运行2分钟的样子。
.本地通知(Local Notifications)功能,制作一个定时器来控制消息推送,当APP程序到后台时,给用户一个提示,告知用户此APP程序被挂起,如果想继续使用某个功能,请打开APP程序。
.Badge Number功能,此功能的作用是,当你携带iPhone移动较大位置时,会唤醒APP程序,并结合后台任务功能,可以使你的APP程序有一定的时间检测相册是否有改动,如果有改动,更改Badge Number数值,给用户一个醒目的提示。
.URLSession Background Upload,使用此功能,即使在后台,也会完成上传。
.如果APP程序在前台备份时,可以不让手机进入休眠模式,等完成备份时才让其进入休眠模式。不过这种方法会被用户中断掉。
.根据指定的时间获得相册中的图片或视频。比方说完成第一次备份后,可以将其时间保存下来,下次就可以以这个时间为基准来获得图片或视频,可以在一定程度上节省时间。
总的来说,其实现不是很完美,考虑到苹果的各种限制,这种实现方式还能接受。
领取专属 10元无门槛券
私享最新 技术干货