iOS

时间:2016-06-18 11:36:10

标签: ios xcode synchronization

序言

我写了一个应该显示即将发生的事件的移动应用程序。该应用程序从服务器下载它的数据。数据每24小时分批准备一次,准备好在凌晨4点之后取出。这为我提供了一个绝佳的机会,可以在一夜之间同步它,并在用户打开应用程序时立即提供新数据。

后台提取

这是我与服务器同步数据的第一种方法。它被宣传为非常强大的功能,但仅使用它(在测试环境之外)是不够的:

  • 无法强制后台提取以精确的间隔执行。

我认为可以配置背景提取操作的频率

// Setup background fetch
let timeIntervalEveryHour: NSTimeInterval = 3600
let sharedApp = UIApplication.sharedApplication()
sharedApp.setMinimumBackgroundFetchInterval(timeIntervalEveryHour)

但它仍然是动态的我认为对于那些不经常使用app的用户来说,它永远不会

  • 如果禁用“后台应用程序刷新”,如果设备处于“低功耗模式”,则会自动执行此操作,将不会触发后台提取。

  • 当设备被锁定时会考虑Data Protection等其他问题,并且会考虑完成所有任务的30秒窗口。

远程(无声)通知

所以我采取了下一步措施,并将服务器配置为在批处理准备就绪后发布静默通知,但发现这还不够:

  • 如果应用程序被用户强制终止或设备重新启动,则不会处理通知。
  • 费率限制。交付将被延迟,这取决于Apple没有明确规定的各种因素,但可能 - 电池寿命,手机是否在蜂窝电话等。
      

    有时在应用程序启动时会调度静默推送通知,这可能会导致竞争条件并检查手动同步。所以我会尝试通过向有效负载添加"alert" = "";来强制它。 (建议here

  • 用户可以停用静音推送通知,即启用“后台应用刷新” - source

手动同步

为了确保数据始终是最新的,如果数据最近没有更新,当应用程序到达前台时,会向用户显示要求手动同步的警报。此外,它可以稍后从设置选项卡启动。不幸的是,根据分析,大多数获取请求都是手动完成的。

还处理了第一次运行案例。

后续步骤

我正在考虑使用VOIP通知。他们应该唤醒应用程序,即使它的力量被杀死。但是我担心这会导致应用被拒绝。

问题

有什么我想念的吗?我知道后台同步取决于多种因素,可能没有互联网连接等,但有没有办法让它更可靠?

0 个答案:

没有答案