iOS:PUSH通知作为Web服务轮询的"触发器"?

AJB*_*AJB 8 web-services objective-c polling push-notification ios

我刚刚开始学习OBJ-C,但我确实有一个我正在努力建立的终极目标应用程序; 这个应用程序将成为iPad上的主/详细应用程序,需要通过"实时"自动更新Web服务.当多个用户之一(在单独的iPad上)在应用程序内执行某些操作时,它还需要将数据发送到远程MySQL数据库.

编辑:正如lxt如此有用地澄清:""使用推送通知作为推送网络服务的提示是否合适" - 答案就是这样."

我为这个问题想象的例子是一个小工具库存管理器,它具有流入表视图的"传入"库存和用户将库存拖放到详细视图中的"库存存储箱" .

像这样:

在此输入图像描述

注意:我的应用程序不需要在不在前台时保持更新.它可以愉快地睡觉,直到它再次发射; 此时需要使用最新数据更新自己.Kyle使用applicationWillEnterForeground为问题的这个特定方面提供了答案:

为了在不过度使用我的web服务服务器的情况下实现这一点,我想象一个结合了webservice轮询和PUSH通知的解决方案,当一个用户(iPad)对数据进行任何更改时触发轮询.所以,流程将如下:

  1. 无论用户可能执行任何操作,Web服务的"默认"轮询都会每分钟触发一次.

  2. 当用户从tableview中拖动库存项目并将其放入存储仓中时,该存储仓会向登录到同一总体帐户的任何其他iPad发起PUSH通知,并触发Web服务轮询以刷新其数据.

简而言之:任何时候iPad"A"上的用户改变PUSH通知发送到iPad"B",iPad"C"等等.当B,C,D等接收到PUSH时,他们会轮询服务器刷新他们的数据.

另一种方法是让帐户中的每台iPad每隔15秒就启动webservice民意调查; 这看起来对我来说带宽很高(并且通常会导致数据没有变化).

我的问题不是"我怎么......?" 更多的是"我该怎么......?".我意识到StackOverflow可能会发现这有些"主观",但我认为这是一个非常有价值的问题,因为我花了两天时间研究这个特定的实践(使用PUSH通知来触发webservice轮询)并找到了完全零相关的文章.

感谢您抽时间阅读.任何帮助,将不胜感激.将非常感谢示例代码和/或特定框架/套件信息.但是现在我真的需要知道这是不是一个好主意.

lxt*_*lxt 10

针对iOS 7进行了更新

因此,您的问题的要点似乎是"使用推送通知作为推送网络服务的提示是否合适" - 答案是肯定的,有一些事情需要注意.在iOS 7之前,您的应用必须处于前台才能实现此功能.现在,您可以使用后台应用程序刷新在收到推送消息后在后台触发Web服务轮询.

Apple自己使用推送通知来触发Web服务调用 - 这就是Passbook中的传递如何被远程更新.当更新的传递可用时,将发送推送通知,然后使iOS调用链接中的相应Web服务以下载新的有效负载.

需要记住的几件事情:首先是推送通知不能得到保证(不一定是问题),但是你也无法保证什么时候会发送.在大多数情况下,你希望它是瞬间的,但情况并非总是如此.此外,任何选择退出推送通知的用户都无法从此功能中受益.

你要做的不是一个非常新颖的问题,你可以使用一些现有的解决方案,而不是使用推送通知来触发更新.您可以使用基于套接字的系统(非常复杂)或HTTP长轮询(不太复杂).还有第三方服务可以轻松实现这一目标 - 其中一种服务是Pusher.

所有这三种替代方案(套接字,长轮询,第三方服务)的一大优势是它们通常是平台中立的,您可以轻松地在其他客户端上使用它们(与APNS不同).如果是我,我会使用其中一种方法而不是推送通知,但在iOS 7上使用后台应用程序刷新,您可能会发现推送可以支持您想要做的所有事情.

不管怎么说,我的两分钱 - 希望它对你有用.