【问题标题】:Is it good to use only GCM for developing chat applications for android ditching XMPP?只使用 GCM 来开发 android 放弃 XMPP 的聊天应用程序好吗?
【发布时间】:2013-05-14 06:41:50
【问题描述】:

WhatsApp 这样的很多应用程序都依赖GCM 在设备空闲或应用程序在后台运行时向设备发送通知。 GCM 消息只是告诉应用程序从服务器同步,然后 XMPP 用于进行实际聊天(传递有效负载)。但是,依靠GCM 发送消息是一个好的决定吗?因此,在我的情况下,当一个用户想与另一个用户交谈时,他会向我的服务器发送一条消息,然后我通过GCM 将消息传递给另一个用户。我了解GCM 不是 100% 可靠,但我可以通过超时和确认消息确保可靠性。如果我完全同意GCM,还有什么可能伤害我的吗? 不使用XMPP 的原因是扩展XMPP 服务器(我不太熟悉)需要付出很多努力,但在GCM 的情况下,我的很多扩展问题都得到了解决由谷歌提供。

【问题讨论】:

  • 取决于你的应用程序的性质,如果你打算在 iPhone、Symbian 等上扩展你的应用程序,依赖 GCM 听起来并不好。
  • @ChorWaiChun 所以如果想只保留 android 就好了?
  • 我会说没关系,到目前为止,我从未从我的服务器接收任何 GCM 失败,并且在我的项目中,我还确实将整个消息 (xml) 包含到了有效负载中,并分配了一个 ID ,所以当手机连接到我的服务器时,我们仍然可以在 GCM 失败的极少数情况下跟踪他没有收到的消息。
  • Google 最近在其 ccs 选项中推出了支持 XMPP 的 GCM。从外观上看,您将获得两全其美,GCM 连接和 XMPP 可靠性
  • “像 WhatsApp 这样的很多应用程序都依赖 GCM” - WhatsApp 没有适当的 GCM 权限。它可能做的是使用 GCM 背后的相同原理——即使在后台或手机处于睡眠状态时,也保持与服务器的长时间运行连接以接收消息。传入的网络数据包将唤醒设备有足够的时间让应用程序获取唤醒锁并保留消息。

标签: android xmpp google-cloud-messaging


【解决方案1】:

我使用 GCM 来提醒客户端连接。如果您仅依靠 GCM 来传递有效负载,则无法轻松跟踪消息的传递。

例如,我在我的应用程序中使用了一种非常基本的流管理形式,因此我更喜欢将其保留在同步实用程序中,并让我的客户端/服务器直接通信。

它也是不可扩展的,尽管您可以将 xml 放在消息正文中并对其进行解析。

我不确定交付保证是什么,但我也会在 google 方面进行检查,如果您使用它来交付多条消息,则需要确保将 collapse_key 函数合并到您的客户,因为如果您使用大容量,如果发送延迟,GCM 会将您的消息合并为一个。

另一件事我不确定 GCM 的实时性,所以我不确定它对于真正的类似聊天的应用程序会有多好。

在使用 GCM 进行有效负载交付之前,我会考虑这些事情。

【讨论】:

  • 我可以在 android i m new bee 中使用 jabber 服务器吗?
  • 这条消息/答案已经有一段时间了,但我正在考虑将消息传递到Push中,当消息被推送到App中时,触发Ajax或某种形式来确认服务器它已收到,但我只是想知道互联网连接是否有可能在 GCM 中间以及 Ajax 与服务器之间“在传递数据的过程中”死亡。 (在您的情况下,GCM 收到,然后连接断开,以及如何处理它,服务器超时?并重新发送 GCM 以触发连接?)
  • @John Jun 记忆中 GCM 是火,然后忘记,我不确定是否有保证的消息传递
  • @John 你能看看这个问题吗,stackoverflow.com/questions/39953817/… 我知道这不是寻求帮助的好方法,但我真的需要一个解决方案。
猜你喜欢
  • 2014-02-13
  • 2015-12-10
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 2015-05-04
  • 1970-01-01
相关资源
最近更新 更多