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