使用XMPP向运行的iOS应用程序发送实时信息

时间:2011-12-20 15:54:12

标签: iphone ios xmpp xmppframework

我正在开发一款iOS应用。应用程序有不同的“区域”,用户可以向他们发布“事物”。观看同一区域的其他用户应将发布的内容发送到他们的手机(但仅在应用程序正在运行时)。

我已经开始使用RESTful API处理Django后端了。我计划在Amazon Web Services,上托管后端,每次将某些内容添加到“区域”时,使用Amazon Simple Queue Service将更新时间和“区域”放入队列。我将创建一个Python应用程序来处理队列中的项目,查询数据库以查看哪些用户可以下载新的“东西” - 目前这部分计划将Apple Push Notification发送到手机,如果应用程序正在运行,它可以发出一个简单的RESTful请求来获取JSON格式的新数据。

但我相信XMPP会是更好的解决方案(在iOS端使用XMPPFramework),并且可以在将来支持Android。


我已经对如何使用XMPP进行了大量研究,但是文档建议您使用公共XMPP网络,用户必须设置XMPP帐户,并且不清楚如何发送非聊天信息。

该项目要求使用XMPP纯粹将信息从服务器发送到用户设备。因此,它应该是一个私有的XMPP网络,如果需要,用户可以在这个专用网络上注册一个XMPP帐户(但在幕后,他们不应该知道什么技术正在为应用程序供电。)


是否可以仅使用XMPP向移动应用发送信息?互联网上的很多答案/教程基本上只是建议使用XMPP服务器和客户端 - 没有提到如何在专用网络上连接两者以发送由XMPP服务器以外的其他东西确定的数据。

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:15)

是的,有可能。更重要的是,完全可以通过XMPP发送和接收任何你想要的东西。

通常,XMPP用于jabber聊天帐户。这意味着一些事情。

  1. 每个用户都需要在服务器上设置为用户。这样服务器就知道要将消息推送到哪些客户端。设置随机用户/通行证并将其直接链接到应用程序并不困难。

  2. 发送聊天信息只是意味着有发件人和收件人。在您的情况下,您可以忽略发件人,但如果您有多个可能来自的地方,那么它可能会很有用。

  3. 消息可以包含您想要的任何信息。我记不清了(自从我使用XMPP以来已经有一段时间了)但是我认为你可以在实际的消息本身(或者json或其他)中发送XML,或者你可以在消息中附加额外的XML并且离开消息本身为空白(或标称值)。

  4. 您需要开始使用的是XMPP服务器。您可以在Web服务器上安装它(我假设您可以在AWS上安装它,但我不确定)。这是我一直使用的服务器,Openfire,设置和使用非常简单(并且有一个很好的Web界面,您可以使用它来设置所有内容)。这使您可以发送接收消息,并使整个事情“私密”。这意味着,尽管您可以连接到公共jabber网络,但您也可以限制对服务器的访问。

    接下来你想要一个基于网络的api。有一个很好的php框架,xmpphp可以帮助你设置api。这个api允许你从python脚本发送消息(例如post req to curl)到xmpp服务器,然后将它发送到iphone。如果您不想发回消息,那么您已经完成了设置。使用php收听XMPP消息是另外一条鱼!

    要记住的另一件事是,您需要从应用程序发送状态,以便服务器知道您是否已登录并“收听”。再次,如果你寻找它,这在互联网上都有相当好的记录(我不记得确切的来龙去脉)。因此,在您的python / php脚本中,您可以测试以查看您尝试发送消息的用户当前是“已登录”还是“正在侦听”。如果不是,您将需要实现推送通知并发送推送通知。如果您对此不确定,我会推荐一项名为urban airship的精彩服务。他们每月免费发送多达1,000,000个推送通知(后续通知非常合理)。否则,请为自己设置服务的世界做好准备! (我听说过!)

    我希望你的大部分问题得到解答。它是一个非常专业的主题(很多人不会知道XMPP - 如果你需要了解它,它只会是你知道的事情之一)。 XMPP虽然非常强大,但它比重复http请求和各种各样的解决方案要好得多。如果你能找到互联网上有相当多的信息,但你可能必须对如何解释信息有点聪明,其中一个尚未完全转移到主流iPhone的东西(在我看来)。

    编辑......还有一件事

    谨防辍学 - 互联网辍学等。这听起来很明显,但它总是咬我!总是忘记有时互联网中断,我的XMPP连接需要重新连接。 Esp,如果人们将应用程序放在后台,然后再回到它。 :)记得在需要时重新连接。