在服务器数据库更新时通知 iOS 应用程序的最佳方式

Guf*_*ros 0 web-services tcp apple-push-notifications ios

我对编程很陌生,我找不到解决我的问题的有效方法。有人能指出我正确的方向吗?

我有一个严重依赖服务器数据的应用程序。服务器上的数据对于每个用户都是唯一的,并且可能每分钟更改一次,也可能每几小时更改一次。目前,当应用程序变为活动状态时,我正在更新本地数据,但我还需要一种通知应用程序以在应用程序保持活动状态且服务器上的数据发生更改时触发更新的方法。我想了几个解决方案:

1) NSTimer 设置为一分钟并触发 url 请求以检查服务器上是否有新数据。比较 lastModified 值后的服务器将返回新数据(如果可用)。

  • 我真的不喜欢这个解决方案,因为我不想让我的服务器因请求数量而过载,尤其是数据库中的数据可能每隔几个小时甚至更长的时间就会改变。

2)APNS - 每次数据更改时从服务器发送通知,然后在收到通知时使用服务器数据库更新本地数据。

  • 这似乎是一个很好的解决方案,但前提是可以限制当应用程序处于活动状态时接收远程通知。据我所知这是不可能的,正如我之前提到的,数据甚至每分钟都可能发生变化,所以我不想在应用程序未运行时向用户发送大量通知。

3) 使用 NSStream/CFStream 的 TCP 套接字?

  • 这是我以前从未做过的事情,所以我什至不确定我是否朝着正确的方向研究这个。

Jam*_*ard 5

一般来说,这是一个很难的话题,但有更多的技术出现来帮助解决这个问题。关于您的每个解决方案的几个想法:

  1. NSTimer 解决方案是有效的轮询,这是我觉得最糟糕的选择。对于每个用户,您都会非常努力地访问您的服务器。

  2. 这将是一个更好的解决方案。APNS 现在支持静默通知,因此您可以向用户发送推送通知,而无需担心通知他们。您可以通过在有效负载中包含 content-available 键而不包含警报键来发送静默通知。更多信息请访问:http : //hayageek.com/ios-silent-push-notifications/。不过,它的速率有限。您可能需要几分钟到几小时才能收到货,所以如果这很重要,您最好选择选项 3。

  3. 这是您最好的解决方案。它需要与您的服务器建立持久连接。AFNetworking 2.0 支持这种基于 Rocket 的连接。这是 Rocket 的文档:http : //rocket.github.io。查看服务器发送的事件。

希望有帮助!