2011-12-19 59 views
1

我的公司为日间交易者提供iPhone应用程序,基本上告诉他们什么时候是买或卖的好时机。一群服务器产生这些BUY和SELL信号,并需要在一分钟或更短的时间内交付给客户的iOS设备。对于我们开发的所有其他移动客户端,我们可以在后台轮询服务器(每分钟一次),以检查更新。可靠的服务器到iPhone短信

但是,在iOS中,似乎在applicationDidEnterBackground中执行与时间或轮询相关的任何操作都不是选项。

这让我看看推送通知,但从我正在阅读的内容来看,它们并不可靠。他们采用即发即忘方法,但不能保证他们会被收到。

你可以看到这个问题。如果我们发出买入信号并且用户采取行动,那么在10分钟后产生卖出信号并通过推送发送,但从未到达,它们可能会损失很多钱。

那么,有没有这样做的好方法还是我运气不好?谢谢!

+0

像Colloquy(IRC客户端)这样的应用程序可以保持TCP连接打开,虽然也许这是一个选项吗? –

+0

似乎Colloquy也使用APNS,你能告诉我他们声称有一个持续的TCP连接吗? – Submerged

+0

对于询问MMS消息是否是一个选项的人(然后删除了)我不得不说没有,我不认为彩信或短信比推送通知更可靠 – Submerged

回答

1

您的服务器和用户设备之间有两个中介:a)Apple和b)网络。

Apple不保证提供所有通知;只有最近的时间才能到达,只有一段时间。有关更多信息,请查看Apple Push Notification Service中的“服务质量”部分。

如果设备通过移动运营商访问网络,事情可能会变得很糟糕。我遇到过一些情况,有些通知直到很晚才到,有些完全丢失。根据我的经验,运营商可以保护他们自己的服务质量,而不是像苹果这样的第三方。 SMS/MMS通常不会丢失,而推送通知可能会失败。

投票服务器将是一个可行的替代您的应用程序。唉,Apple不允许网络操作发生在已经处于后台状态的应用程序(报亭下载和VoIP除外)。

+1

这是我怀疑的 - 这真的太糟糕了,没有更好的选择。我希望所有人都能在将来使用后台进程,但是有了规则,这样就不会被滥用。 – Submerged

+0

如果您发现“仅限最新版本”是一种限制,则可以在服务器上保留一份通知列表,以便应用程序在启动时进行检查。 – Greg

0

尝试使用苹果自己的推送通知服务:http://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html

这是很容易实现的,与应用程序只需要几行代码和服务器做送就有点PHP和JSON的。好处是您的服务器将请求发送给Apple,并且Apple自己的服务器可安全可靠地处理交付给设备。通知通常在发送后10秒内发送(除非设备处于脱机状态,则在设备联机时将发送通知)。

根据我对推送通知的体验,我没有丢失一个推送通知,并且有一个交付选项可以不断尝试交付,直到它成功为止,甚至还有一些可用的服务器端回调API可让您检查通知的状态。您也可以尝试像Urban Airship这样的服务来为您完成这项工作。


您也可以尝试使用苹果的background modes之一,因为这一部分(如接收到“买入”的通知,并安装了该应用等待在后台的“卖”。最大的限制是,应用程序一次只能在后台运行10分钟左右,因此您必须使用一种解决方法,如在后台播放音乐(或制作音乐曲目,如音乐曲目; P),或者提示用户重新打开应用程序继续后台会话

+0

我已经实现了APNS和si因为我们发送了很多,有时候会有新的推送通知发送出去,然后旧的通知被覆盖。我会检查城市飞艇。 – Submerged

+0

如果您使用支持的API,您可以确保第一个在**之前得到**,甚至发送下一个,并保持下一个在您的服务器上等待,直到第一个到达。苹果公司有一个模糊的API,允许进行状态检查,城市飞艇有一个不太明显的API来做同样的事情。 APNS的架构非常有能力和灵活性,但也很模糊,所以你不能用**做很多事情,你只需要找到解决方法。 – Greg

+0

很高兴知道!我会检查一下。事实上,他们不保证任何事情仍然令我感到担忧,但我想这是我可用的最佳解决方案。 – Submerged

0

某些应用程序似乎很好地推送通知(GroupMe),而其他应用程序则不会。如果你真的担心,你可以使用像Twilio这样的服务向用户发送带有链接的SMS消息,该链接将打开你的应用并提供一些信息。所以短信可以说“卖出售yourapp://股票= APL”或类似的东西。这对于iPod touch用户或iPad用户来说显然不起作用(尽管我不知道这是否会对您造成问题。)