将iOS应用程序与服务器保持同步

3
我们正在设计一个系统,基于服务器上的特定事件为特定设备创建地理围栏。预期客户端(设备)将与服务器数据同步,问题是如何实现?
最初(最优)的想法是向设备发送静默推送通知,通知其有新数据可用,并触发数据拉取。鉴于此解决方案适用于 Android 操作系统设备,我们认为可以通过类似的方式解决 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 内置解决方案用于这种用例?

显然,你只需使用PubNub、Firebase或类似的工具。你问了关于如何制作应用程序的“主要问题”。如今你不再是“制作应用程序”,而是使用PubNub或Firebase创建系统。 - Fattie
3个回答

2
有一个很棒的服务叫做Simperium,它有一个iOS SDK可以帮助保持您的信息同步。我听说过他们是因为我开始使用SimpleNote,这是一个使用同步服务的免费笔记工具。他们被Automattic收购了,Automattic运营着WordPress,所以整个交易应该相当稳定。
希望这可以帮到您!

0

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

在这里,您还可以查询数据库以获取数据更改,而不是向设备推送触发器,这可能会与推送通知产生冲突,并且并非其预期用途。如果发现数据有变化(或检查了某个布尔标志),则启动数据拉取。


0

我不确定你处理的数据量有多大,但每5分钟进行一次REST查询是我会选择的方式。也许你甚至可以将其切换为每次启动应用程序时进行查询,这已经足够好了。

我们有一个应用程序,需要将用户数据与后端服务器同步-每次启动应用程序时,它都会查询后端服务器以查看是否有任何更新。我们从服务器md5hash数据,然后我们只需检查我们的哈希值是否与最新数据匹配-如果不匹配,则拉取新的数据集。

一般来说,iOS并不真正允许您像在Android上那样进行多任务处理。现在,如果您不发布到应用商店-仅将其用作内部应用程序,您可以对事物进行一些微调,并在后台模式下运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接