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

Jon*_*Cox 6 iphone xmpp ios xmppframework

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

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

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


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

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


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

提前谢谢你的帮助 :)

Tho*_*son 15

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

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

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

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

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

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

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

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

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

编辑...还有一件事

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