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

时间:2013-11-29 20:15:44

标签: ios web-services tcp apple-push-notifications

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

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

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

  • 我真的不喜欢这个解决方案,因为我不希望我的服务器超过请求数量,特别是数据库中的数据可能每隔几个小时甚至更长时间才会发生变化。

2)APNS - 每次数据发生变化时从服务器发送通知,并在收到通知时用服务器数据库更新本地数据。

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

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

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

1 个答案:

答案 0 :(得分:4)

这一般是一个很难的主题,但更多的技术正在出现以帮助它。对每个解决方案都有几点想法:

  1. NSTimer解决方案是有效的轮询,这是我觉得最糟糕的选择。你会很难为每个用户点击你的服务器。

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

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

  4. 希望有所帮助!