Android GCM:了解 XMPP

2024-04-16

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

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

让我们以 HTTP 为例:

  1. 我的应用程序将“hello world”和 rigId 发送到我的小型个人服务器:url.openConnection(""), then OutputStream用于发送 POST 数据和InputStream为了得到回应

  2. 服务器在这个url处,将“hello word”消息与regId一起放入数据库中,然后使用php的curl库将数据作为json字符串发送到GCM服务器,例如{"myResponse":"I'm not world I'm Dan"}(在模拟器中使用测试目标 ID)

  3. GCM服务器做他的事

  4. 我的应用程序(可能在另一部手机上)使用IntentService in a WakefulBroadcastReceiver得到的消息为intent.getExtras().getString("myResponse")

这很有效,我可以使用我的应用程序将消息从一部手机发送到另一部手机,并一路收集服务器上的数据。

问题很少

这种处理 HTTP 的方式理论上可行吗? (我看了很多帖子和教程,尤其是谷歌的,但还是不确定)

真正的大问题

使用 XMPP 执行相同操作的步骤是什么?

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


Official https://developers.google.com/cloud-messaging/ccs定义:

Google Cloud Messaging (GCM) 云连接服务器 (CCS) 是一个 XMPP 端点提供持久、异步、双向 连接到 Google 服务器。

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

两者之间的一些区别:
1) 与 HTTP 不同,使用 XMPP 消息,您不需要在每个有效负载中包含身份验证标头,因为服务器在连接时经过身份验证,并且我们维护相同的连接。
2) CCS 使用 XMPP 作为传输层,因此在成功建立连接后,您可以交换节。
3) 如果您愿意,您可以继续对下游使用 HTTP,而仅对上游使用 XMPP。
4)代替registration_ids参数使用to:在 XMPP 中,我们只能通过一节发送到一个 RegID。

因此,如果我要解释一下您的示例如何与 XMPP 配合使用:
- 与CCS建立连接
- 发送上游消息 https://developers.google.com/cloud-messaging/upstream从客户端“Hello, World!”到您的服务器
- 一旦您的服务器收到此消息,请通过向 GCM 发送 ACK 进行确认
- For 下游消息 https://developers.google.com/cloud-messaging/downstream您可以选择使用 HTTP 或 XMPP
- 但如果 XMPP:接收、保存在数据库中并在发送响应时({"myResponse":"I'm not world I'm Dan"}) 返回客户端(相同或不同的 RegID),向 CCS 发送下游节; CCS 将发送 ACK/NACK 以确认已收到消息
- 一旦客户端应用程序收到消息,您还将收到delivery_receipt(如果需要)。

除此之外,您可以通过阅读我在整篇文章中链接的官方文档来更深入地了解。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android GCM:了解 XMPP 的相关文章

随机推荐

  • 如何使用 Celery、RabbitMQ 和 Django 确保每个用户的任务执行顺序?

    我正在运行 Django Celery 和 RabbitMQ 我想要实现的是确保与一个用户相关的任务按顺序执行 具体来说 一次执行一个 我不希望每个用户执行任务并发 每当为用户添加新任务时 它应该取决于最近添加的任务 如果此类型的任务已为此
  • 和发动机施加力

    有谁知道为什么 applyforce 只适用于我的精灵之一 此外 当我按下其他精灵时 它也会对单个精灵施加力 nextTile 方法工作正常 enter code herecom martynnorman jude 包 作者尼古拉斯 格拉姆
  • css - 垂直滚动条删除

    下面是带有左右附加图像的菜单行的代码 我需要这样的行为 当屏幕宽度的分辨率从 960px 到 1398px 时 左右 div 同时隐藏 这段代码完全符合我的要求 问题是 在低屏幕宽度 960px 到 1398px 上 它会向浏览器添加水平滚
  • Facebook Messenger Bot 可以与群组中的两个或更多人聊天吗?

    所有消息机器人一次只与一名用户直接交互吗 机器人可以加入两人或多人组成的群组并与他们交谈吗 目前 Facebook Messenger 机器人只能在一对一的基础上工作 原因之一可能是隐私 Facebook 在在群组环境中推出机器人之前非常谨
  • 快速获取当前设备在 wifi 和蜂窝网络中的 IP 地址

    func getIPAddress gt String var address String var ifaddr UnsafeMutablePointer
  • 使用 PowerShell 删除文本文件的顶行

    我试图在导入之前删除大约 5000 个文本文件的第一行 我对 PowerShell 还很陌生 所以不确定要搜索什么或如何解决这个问题 我当前使用伪代码的概念 set content file get content unless line
  • 使用 jQuery 和 Select2 时“按键”事件无法正常工作

    我有一个论坛 我在其中更改选项卡的功能以进入 当用户按下 Enter 下一个输入字段时获得焦点并以某种方式 iImanage 打开 select2 选择框focusin事件 因此选择 2 框打开 但是 当我选择该值并在 selec2 选择框
  • Laravel/Symfony:无法加载“app”配置文件

    升级我的家园并安装我的软件包后 我遇到了一个奇怪的错误 通话中php artisan输出如下 In LoadConfiguration php line 68 Unable to load the app configuration fil
  • opencv边界框问题

    我有一个图像需要在周围绘制一个边界框 我正在尝试使用本文底部的代码 我遇到的问题是我尝试模糊蓝色框形状以删除其细节 例如 cv2 blur img 20 20 但模糊图像似乎没有足够好的边缘来生成边界框 我发现 如果我将下面的代码与具有与下
  • Spring Java 应用程序找不到密钥库文件

    我正在尝试设置一个简单的 Spring 应用程序来使用 SSL 并将其托管在 Digital Ocean 上 为什么我的应用程序找不到密钥库文件 我设置的 Droplet 基于 Ubuntu 18 04 我使用 Letscrypt 来获取证
  • WCF net.tcp 传输安全 - 如何在客户端上禁用服务器证书验证

    我正在使用 WCF 进行一些测试 目前我们有以下服务器设置 简化的配置
  • 在 MSBuild 中将字符串构建为基本字符串 n 次的串联

    我在 MSBuild 的属性中有一个数字 n 我还有一个字符串 Str 需要重复 n 次才能获得最终字符串 即重复 Str n 次 例如 如果n为3 Str为 abc 我想要获取的是 abcabcabc 由于无法在 MSBuild 中循环
  • 如何在 Windows 上为 ruby​​ 安装 PCAP

    这肯定是一个相对较新的问题 但我仍然陷入困境 我知道有一个简单的解决方案 我已经进行了一些谷歌搜索 但找不到确切的答案 这是我得到的错误 C Ruby193 include ruby 1 9 1 i386 mingw32 gt gem in
  • 将一个 div 置于另一个 div 之上

    我向我的网络应用程序添加了一个登陆页面 因此当它从服务器加载数据时 登陆页面会显示加载图像和描述 div class map view div class loading screen img src img loading boys gi
  • 在 Web.Config 文件外部存储 SMTP

    一段时间以来 我一直将连接和应用程序设置存储在外部文件中 并仅通过 web config 引用该文件 这非常有效 因为它允许我保留单独的连接字符串和应用程序设置 这真的很方便 因为我发现在开发过程中我经常会对 webconfig 进行许多更
  • CreateRemoteThread 32->64 和/或 64->32

    我需要一种在 x64 窗口中 CreateRemoteThread 到 64 和 32 位进程的方法 我已经弄清楚了如何找到目标进程的指令集 如何在目标进程中为汇编雪橇分配内存 并且我几乎已经弄清楚如何处理地址空间随机化 当远程进程的指令集
  • 为什么我的原型函数不返回实例的属性?

    我有一个简单的 JavaScript 对象 函数 myClass x y this x x this y y 和一个原型函数 myClass prototype myfunction function console log this x
  • X.509 证书的 Java 1.7 主题哈希 OpenSSL 1.0+ 兼容

    我已经为此苦苦挣扎了几天 我正在开发一个在嵌入式 Linux 环境中运行的 Java 1 7 应用程序 OpenSSL 不可用 我无法控制设备上操作系统映像中的内容 我需要计算自签名 X 509 证书的主题哈希 生成与 OpenSSL 1
  • MutationRecord.addedNodes 节点列表中返回的节点数(mutationObserver)

    MutationRecord addedNodes 返回 NodeList 其中检测到在我的文档中添加了节点 当我使用 obj appendChild 方法时 mutationObserver 会检测到它并将 MutationRecord
  • Android GCM:了解 XMPP

    我正在尝试使用应用程序在我的 GCM 中实现 XMPP 协议 但即使经过广泛搜索 我也不理解其背后的概念 另外 也许我并不真的需要 XMPP 来完成我想用我的应用程序做的事情 但我喜欢学习东西 让我们以 HTTP 为例 我的应用程序将 he