我写了一个应该显示即将发生的事件的移动应用程序。该应用程序从服务器下载它的数据。数据每24小时分批准备一次,准备好在凌晨4点之后取出。这为我提供了一个绝佳的机会,可以在一夜之间同步它,并在用户打开应用程序时立即提供新数据。
这是我与服务器同步数据的第一种方法。它被宣传为非常强大的功能,但仅使用它(在测试环境之外)是不够的:
我认为可以配置背景提取操作的频率
// Setup background fetch
let timeIntervalEveryHour: NSTimeInterval = 3600
let sharedApp = UIApplication.sharedApplication()
sharedApp.setMinimumBackgroundFetchInterval(timeIntervalEveryHour)
但它仍然是动态的我认为对于那些不经常使用app的用户来说,它永远不会。
如果禁用“后台应用程序刷新”,如果设备处于“低功耗模式”,则会自动执行此操作,将不会触发后台提取。
当设备被锁定时会考虑Data Protection等其他问题,并且会考虑完成所有任务的30秒窗口。
所以我采取了下一步措施,并将服务器配置为在批处理准备就绪后发布静默通知,但发现这还不够:
有时在应用程序启动时会调度静默推送通知,这可能会导致竞争条件并检查手动同步。所以我会尝试通过向有效负载添加
"alert" = "";
来强制它。 (建议here)
为了确保数据始终是最新的,如果数据最近没有更新,当应用程序到达前台时,会向用户显示要求手动同步的警报。此外,它可以稍后从设置选项卡启动。不幸的是,根据分析,大多数获取请求都是手动完成的。
还处理了第一次运行案例。
我正在考虑使用VOIP通知。他们应该唤醒应用程序,即使它的力量被杀死。但是我担心这会导致应用被拒绝。
有什么我想念的吗?我知道后台同步取决于多种因素,可能没有互联网连接等,但有没有办法让它更可靠?