保持iOS应用与服务器同步

时间:2016-02-15 18:30:00

标签: ios iphone apple-push-notifications data-synchronization

我们正在设计一个基于服务器上特定事件的系统,为特定设备创建地理围栏。预计客户端(设备)将与服务器数据同步,问题是如何?

初始(最佳)的想法是向设备发送静默推送,以通知它有关新数据,并触发数据拉取。知道这个解决方案适用于Android OS设备,我们虽然可以在iOS上以类似的方式解决问题。不幸的是,我的iOS开发人员告诉我,静态推送在iOS上并不可靠,并在讨论后提出:Silent push notifications only delivered if device is charging and/or app is foreground

因此,我的问题是如何使iOS设备上的(地理围栏)数据与服务器端保持同步?

  • 我们可以说,每说5分钟,这个解决方案效率极低,对于大多数设备来说,新的地理位置很少发生变化,但我们的“高级用户”需要经常更新地理围栏。
  • 我们可以用某种静音推动机制推动,但它必须是可靠的。
  • 也许某种持久连接(tcp或更好的udp),但这似乎是电池耗尽解决方案。除了不可靠之外,服务器还必须跟踪不断变化的IP,这在许多蜂窝网络上都是不可能的。
  • 的WebSocket。也是电池耗尽解决方案,不适用于后台同步。实际上很少更新数据的设备(例如每月一次)的过度杀伤。
  • 一些商业解决方案(PubNub或Pusher),但我们肯定更喜欢内部解决方案。

在这种情况下是否还有其他解决方案?也许我们使用静默推送的方法是不对的,但Apple解决方案还有其他用于此类用例的内容吗?

3 个答案:

答案 0 :(得分:2)

这是一款名为Simperium的精彩服务,其iOS SDK可帮助您保持信息同步。我听说过他们,因为我开始使用SimpleNote,一个使用同步服务的免费笔记工具。他们被Automattic收购,后者运行Wordpress,因此整个交易应该相当稳定。

希望这有帮助!

答案 1 :(得分:0)

您可以在AppDelegate中的applicationDidEnterBackground:方法中运行同步操作。这是我一直使用的解决方案,只要同步操作不会花费太长时间。

在这里,您还可以查询数据库中的数据更改,而不是将触发器推送到设备,这可能会因推送通知而变得毛茸茸,并且实际上并不是他们的预期用途。如果找到数据中的更改(或检查了某个布尔标志),则启动数据拉取。

答案 2 :(得分:0)

我不确定您使用了多少数据,但每隔5分钟进行一次REST查询就是我要去的方式。也许您甚至可以在每次启动应用程序时将其切换为查询都足够好?

我们有一个应用程序,其中用户数据需要与后端服务器同步 - 每次我们启动应用程序时,它都会查询后端服务器以查看是否有任何更新。我们从服务器获取数据,然后我们可以根据最新数据检查我们的哈希值 - 如果它没有“匹配”,那么我们就会提取新的数据集。

一般来说,iOS并不能让你像在Android上那样做多任务。现在,如果您没有发布到应用程序商店 - 并且仅将其作为内部应用程序使用,您可以使用某些内容来运行并以后台模式运行。