objective-c - iOS:推送通知作为 Web 服务轮询的 "Trigger"?

标签 objective-c ios web-services push-notification polling

我刚刚开始学习 OBJ-C,但我确实有一个正在努力构建的最终目标应用程序;这个应用程序将是 iPad 上的主/细节应用程序,需要通过网络服务“实时”更新自己。当多个用户之一(在不同的 iPad 上)在应用程序中执行某些操作时,它还需要将数据发送到远程 MySQL 数据库。

编辑:正如 lxt 非常有帮助地阐明的那样:““使用推送通知作为轮询网络服务的提示是否合适”——答案有点像。”

为了这个问题的目的,我想象的例子是一个小部件库存管理器,它有流入 TableView 的“传入”库存和用户将库存拖放到其中的“库存存储箱”详细 View 。

像这样:

enter image description here

注意:当我的应用程序不在前台时,它不需要自己保持更新。它可以愉快地 sleep ,直到它再次启动;在这一点上,它需要用最新的数据更新自己。 Kyle 使用 applicationWillEnterForeground: 为问题的这个特定方面提供了答案。

为了在不让我的 web 服务服务器负担过重的情况下实现这一点,我设想了一种解决方案,它结合了 web 服务轮询和推送通知,以便在一个用户 (iPad) 对数据进行任何更改时触发轮询。所以,流程是这样的:

  1. 无论用户执行任何操作,网络服务的“默认”轮询将每分钟触发一次。

  2. 当用户将库存项目从 TableView 拖放到存储箱中时,这将向登录到同一总体帐户的任何其他 iPad 发起推送通知,并触发网络服务轮询以刷新其数据。

简而言之:只要 iPad“A”上的用户更改任何内容,就会向 iPad“B”、iPad“C”等发送推送通知。当 B、C、D 等接收到推送通知时,他们然后轮询服务器以刷新他们的数据。

替代方法是让帐户上的每个 iPad 每 15 秒触发一次网络服务轮询;这对我来说似乎很昂贵(并且通常不会导致数据发生变化)。

我的问题不是“我该如何……?”以及更多的“我应该如何......?”。我意识到 StackOverflow 可能会觉得这有点“主观”,但我认为这是一个非常有值(value)的问题,因为我已经花了两天时间研究这种具体做法(使用 PUSH 通知来触发网络服务轮询)并且发现了零篇相关文章。

感谢您花时间阅读本文。任何帮助,将不胜感激。示例代码和/或特定框架/工具包信息将不胜感激。但实际上,现在我只需要知道这是否是个好主意。

最佳答案

针对 iOS 7 进行了更新

所以你的问题的要点似乎是“使用推送通知作为轮询网络服务的提示是否合适”——答案是肯定的,但有几件事需要注意。在 iOS 7 之前,您的应用程序必须在前台才能运行。现在,您可以使用后台应用刷新在收到推送消息后在后台触发您的网络服务轮询。

Apple 自己使用推送通知来触发网络服务调用 - 这就是 Passbook 中的通行证远程更新的方式。当更新的通行证可用时,将发送推送通知,这会导致 iOS 调用通行证中链接的适当网络服务以下载新的有效负载。

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

您要解决的问题并不是一个非常新奇的问题,您可以使用一些现有的解决方案来代替使用推送通知来触发更新。您可以使用基于套接字的系统(相当复杂)或 HTTP 长轮询(不那么复杂)。也有第三方服务可以很容易地实现这一点——这样的服务之一是 Pusher .

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

无论如何只是我的两分钱 - 希望它对你有用。

关于objective-c - iOS:推送通知作为 Web 服务轮询的 "Trigger"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046509/

相关文章:

ios - 使用 Retina 显示屏将 Tile 转换为 CGPoint

ios - 由于发送到 VC 的无法识别的选择器导致应用程序崩溃

ios - 无法关闭从 iOS 8 中的 UIDocumentInteractionController 调用的电子邮件表

android - Rhomobile 与 MoSync/Phonegap/HTML5

ios - 架构 i386 的重复符号错误?

web-services - 在服务器上没有专用 IP 地址的情况下使用 SSL 保护 ASP.NET Web 服务

java - 使用 JAXRPC 将字符串数组作为参数发送到 Web 服务方法

ios - 控件可能会到达非空函数的结尾 - 使用 Apple 代码时

c# - C# 中的 using(){...} 与 Cocoa 中的 autoreleasepool{...} 的用途相同吗?

python - 如何在 Python 中使用 WSDL (SOAP) Web 服务?