Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
androidgcm:理解XMPP_Android_Google Cloud Messaging_Xmpp - Fatal编程技术网

androidgcm:理解XMPP

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的数据库

我正试图使用应用程序在我的GCM中实现XMPP协议,但即使在广泛搜索之后,我也不理解它背后的概念

另外,也许我真的不需要XMPP来做我想用我的应用程序做的事情,但我喜欢学习东西

让我们以这个例子来说明我可以用HTTP做什么:

  • 我的应用程序将“hello word”和regId发送到我的小个人服务器:
    url.openConnection(“”
    ),然后
    OutputStream
    发送帖子数据和
    InputStream
    获取响应

  • 服务器在这个url上,将“hello word”消息放入带有regId的数据库中,然后使用php的curl库将数据作为json字符串发送到GCM服务器,如
    {“myResponse”:“我不是世界,我是丹”}
    (在模拟器中使用测试目标id)

  • GCM服务器做他的生意

  • 我的应用程序(可能在另一部手机上)在
    WakefulBroadcastReceiver
    中使用
    intent服务
    ,该服务以
    intent.getExtras().getString(“myResponse”)的形式获取消息

  • 这很好用,我可以使用我的应用程序从一部手机向另一部手机发送消息,并通过我的服务器收集数据

    很小的问题 从理论上讲,这种处理HTTP的方法行吗?(我看到了很多帖子和教程,尤其是谷歌的,但仍然不确定)

    真正的大问题 使用XMPP执行相同操作的步骤有哪些

    我不想要教程或代码,我想了解信息通过这个我不太熟悉的协议的方式(我设法在我的服务器上安装ejabberd,在我的PC上使用pidgin,在我的手机上使用Xabber)。

    定义:

    谷歌云消息(GCM)云连接服务器(CCS)是一个 XMPP端点,提供持久、异步、双向的 连接到谷歌服务器

    与CCS建立联系是第一步,也是最重要的一步。一旦完成此操作并保持长期连接,其他部分就不会那么棘手了

    两者之间的一些区别:
    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。非常感谢凯安