我尝试使用应用在我的GCM中实施XMPP协议,但即使经过广泛搜索,我也不了解其背后的概念。
另外,也许我真的不需要XMPP用于我想用我的应用程序做什么,但我喜欢学习东西。
让我们举一个关于我可以用HTTP做什么的例子:
我的应用发送"你好的话"并且注册到我的小人物服务器:url.openConnection("")
,然后OutputStream
用于发送POST数据,InputStream
用于获取响应
服务器,在这个网址上,输入" hello word"使用regId在数据库中显示消息,然后使用php的curl库将数据作为json字符串发送到GCM服务器,如{"myResponse":"I'm not world I'm Dan"}
(在模拟器中使用测试目的地ID)
GCM服务器开展业务
我的应用(可能在另一部手机上)使用IntentService
中的WakefulBroadcastReceiver
获取消息intent.getExtras().getString("myResponse")
效果很好,我可以使用我的应用程序将消息从一部手机发送到另一部手机,并在我的服务器上收集数据。
这种处理HTTP的方式是理论上的吗? (我看过很多帖子和教程,特别是Google的帖子和教程,但仍然不确定)
使用XMPP执行相同操作的步骤是什么?
我不想要教程或代码片段,我想了解信息通过此协议的方式我不太了解(我设法在我的服务器上安装ejabberd并使用pidgin我的电脑和Xabber在我的手机上)。
答案 0 :(得分:3)
Official定义:
Google云消息传递(GCM)云连接服务器(CCS)是一个 XMPP端点,提供持久,异步,双向 与Google服务器的连接。
与CCS建立连接是这里第一步也是最重要的一步。完成此操作并保持长期连接后,其他部分就不那么棘手了。
两者之间存在一些差异:
1)与HTTP不同,使用XMPP消息时,您不需要在每个有效负载中包含Authentication头,因为服务器在连接时已经过身份验证,并且我们保持相同的连接。
2)CCS使用XMPP作为传输层,因此在成功建立连接后,您可以交换节
3)您可以继续使用HTTP作为下游,如果您愿意,只能将XMPP用于上游
4)而不是registration_ids
param在XMPP中使用to:
而我们只能通过一个节发送到一个RegID。
所以,如果我要解释你的例子如何与XMPP一起使用:
- 与CCS建立联系
- 从客户端发送upstream message到您的服务器" Hello,World!"
- 通过向GCM发送ACK确认服务器收到此消息后,确认
- 对于downstream message,您可以选择使用HTTP或XMPP
- 但是如果XMPP:接收,保存在数据库中,并在将响应({"myResponse":"I'm not world I'm Dan"}
)发送回客户端(相同或不同的RegID)时,将下游节发送给CCS; CCS将发送ACK / NACK以确认已收到消息
- 一旦客户端应用程序收到消息,您还将收到delivery_receipt(如果请求)。
除此之外,您可以通过阅读我在整个帖子中链接的官方文档来更深入地了解。
希望这有帮助!