6

我正在开发一个 iOS 应用程序。应用程序有不同的“区域”,用户可以向它们发布“东西”。观看同一区域的其他用户应该将发布的内容发送到他们的手机(但前提是应用程序正在运行)。

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

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


我已经对如何为此目的使用 XMPP 进行了大量研究,但文档表明您将使用公共 XMPP 网络,用户必须设置一个 XMPP 帐户,并且不清楚如何发送非聊天信息。

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


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

提前谢谢你的帮助 :)

4

1 回答 1

15

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

通常 XMPP 用于 jabber 聊天帐户。这意味着几件事。

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

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

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

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

接下来,您需要一个基于 Web 的 API。有一个很好的 php 框架,xmpphp可以帮助你设置一个 api。这个 api 将允许您从您的 python 脚本(例如 post req 到 curl)发送消息到 xmpp 服务器,该服务器将把它传递到 iphone。如果您不想发回消息,那么您就一切就绪。使用 php 监听 XMPP 消息完全是另一回事!

要记住的另一件事是,您需要从应用程序发送状态,以便服务器知道您是否已登录并“收听”。同样,如果您查找它,这一切都在互联网上得到了很好的记录(我不太记得确切的来龙去脉)。因此,在您的 python/php 脚本中,您可以测试以查看您尝试向其发送消息的用户当前是否“登录”和“收听”。如果不是,您将需要实现推送通知并发送推送通知。如果您对此不确定,有一项很棒的服务,叫做城市飞艇我会推荐的。他们每月免费发送多达 1,000,000 条推送通知(后续通知非常合理)。否则,请为自己设置服务的世界做好准备!(我听说!)

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

编辑...还有一件事

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

于 2011-12-20T16:12:09.437 回答