小编ape*_*rov的帖子

在iOS上可靠的后台同步

前言

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

后台获取

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

  • 没有办法强制后台提取以确切的时间间隔执行。

我认为可以配置后台获取操作的频率

// Setup background fetch
let timeIntervalEveryHour: NSTimeInterval = 3600
let sharedApp = UIApplication.sharedApplication()
sharedApp.setMinimumBackgroundFetchInterval(timeIntervalEveryHour)
Run Code Online (Sandbox Code Playgroud)

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

  • 如果禁用了“后台应用程序刷新”(如果设备处于“低功耗模式”下会自动发生),则不会触发后台获取。

  • 还考虑了其​​他问题,例如设备锁定时的数据保护和完成所有任务的30秒窗口。

远程(静默)通知

因此,我下一步进行了配置,将服务器配置为在批处理就绪后发布静默通知,以发现这还不够:

  • 如果应用程序被用户强行杀死或重新启动设备,则不会处理通知。
  • 速率限制。交货将延迟,这取决于Apple未明确指定的多种因素,但可能取决于电池寿命,手机是否使用手机等。

    有时,在应用程序启动时会分发静默推送通知,这可能会导致竞争状况,需要进行手动同步检查。因此,我将尝试通过添加"alert" = "";有效负载来强制实施此操作。(因为它建议在这里

  • 用户可以通过取消设置“后台应用刷新”来禁用静默推送通知-

手动同步

为了确保数据始终是最新的(如果不是最近更新的),则当应用程序出现在前台用户时会收到警报,要求您进行手动同步。也可以稍后在“设置”标签中启动。不幸的是,根据分析,大多数获取请求都是手动发出的。

首次运行的情况也得到处理。

下一步

我正在考虑使用VOIP通知。即使应用被强行杀死,他们也应将其唤醒。但是我担心这会导致应用程序被拒绝。

问题

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

xcode synchronization ios

5
推荐指数
0
解决办法
311
查看次数

标签 统计

ios ×1

synchronization ×1

xcode ×1