androidgcm:理解XMPP
我正试图使用应用程序在我的GCM中实现XMPP协议,但即使在广泛搜索之后,我也不理解它背后的概念 另外,也许我真的不需要XMPP来做我想用我的应用程序做的事情,但我喜欢学习东西 让我们以这个例子来说明我可以用HTTP做什么:androidgcm:理解XMPP,android,google-cloud-messaging,xmpp,Android,Google Cloud Messaging,Xmpp,我正试图使用应用程序在我的GCM中实现XMPP协议,但即使在广泛搜索之后,我也不理解它背后的概念 另外,也许我真的不需要XMPP来做我想用我的应用程序做的事情,但我喜欢学习东西 让我们以这个例子来说明我可以用HTTP做什么: 我的应用程序将“hello word”和regId发送到我的小个人服务器:url.openConnection(“”),然后OutputStream发送帖子数据和InputStream获取响应 服务器在这个url上,将“hello word”消息放入带有regId的数据库
url.openConnection(“”
),然后OutputStream
发送帖子数据和InputStream
获取响应
{“myResponse”:“我不是世界,我是丹”}
(在模拟器中使用测试目标id)
WakefulBroadcastReceiver
中使用intent服务
,该服务以intent.getExtras().getString(“myResponse”)的形式获取消息
1) 与HTTP不同,对于XMPP消息,您不需要在每个有效负载中包含身份验证头,因为服务器在连接时经过身份验证,并且我们保持相同的连接。
2) CCS使用XMPP作为传输层,因此在成功建立连接后,您可以交换节。
3) 不过,如果您愿意,您可以继续对下游使用HTTP,而只对上游使用XMPP。
4) 在XMPP中使用
to:
,而不是registration\u id
param,我们只能通过一节发送到一个RegID
因此,如果我要解释您的示例如何使用XMPP:-与CCS建立连接
-从客户端向服务器发送“你好,世界!”
-服务器收到此消息后,通过向GCM发送确认信息进行确认
-因为您可以选择使用HTTP或XMPP
-但如果XMPP:receive,保存在数据库中,并在向客户端发送响应(
{“myResponse”:“我不是世界,我是丹”}
)时(相同或不同的RegID),则向CCS发送下游节;CCS将发送ACK/NACK以确认其已收到该消息-一旦客户端应用程序接收到消息,您还将收到交付收据(如果要求) 除此之外,你可以通过阅读我在整个帖子中链接的官方文件来更深入地理解
希望这有帮助 谢谢,这很有帮助!我已经阅读了官方文件(他妈的读了很多次),但仍然有一些非常阴暗的方面:与数据库通信的代码(php?)在哪里?gcm演示示例不包含任何类似smack的XMPP库,因此我不理解。我不清楚我的个人服务器与GCM服务器的使用情况。另外,我能理解ACK的概念,但在网上找不到任何关于如何发送它们的线索。嘿,丹,我理解你的问题,我们大家都会遇到的,别担心。代码(.php)在哪里假设开发人员知道如何实现它,或者至少知道其创建和维护后端服务器的责任。第二个问题:您可以继续使用您的个人服务器,但您可以处理排队,然后检查设备是否可用,如果以后不再轮询,请继续轮询,直到成功传递消息为止?如果是的话,你可以使用你的服务器。尽管我已经意识到GCM的一个主要好处是它现在是OS框架的一部分,这使得客户端的事情变得非常简单。官方示例仅适用于HTTP,但这里有一个很好的XMPP示例,它使用Smack库:。希望所有这些信息能让事情变得更清楚一点。:)事实上,有一个官方的例子在谈论XMPP,但我知道你要去哪里了,我对XMPP的掌握还不够,甚至没有考虑将其用于GCM。非常感谢凯安