仅使用GCM开发Android聊天应用程序放弃XMPP好吗?

8
许多应用程序(如 WhatsApp)依赖于 GCM,在设备处于空闲状态或应用程序在后台运行时向设备发送通知。GCM 消息只是告诉应用程序从服务器同步,然后使用 XMPP 进行实际聊天(传递有效负载)。但是,仅依靠 GCM 发送消息是否是一个好决定呢?因此,在我的情况下,当一个用户想要与另一个用户交谈时,他向我的服务器发送一条消息,然后我通过 GCM 将消息传递给另一个用户。我知道 GCM 并不完全可靠,但我可以通过超时和确认消息确保可靠性。如果我完全使用 GCM,是否还有其他可能会伤害我?之所以不使用 XMPP 是因为扩展 XMPP 服务器需要大量的工作(而且我不太熟悉),但在使用 GCM 的情况下,Google 已经解决了许多我的扩展问题。

根据您的应用程序性质而定,如果您计划在 iPhone、Symbian 等平台上扩展您的应用程序,则依赖 GCM 不是一个好主意。 - Chor Wai Chun
@ChorWaiChun 所以如果只想保留在 Android 上,这是很好的选择吗? - lovesh
我认为目前为止还好,我从服务器接收GCM从来没有失败过,并且在我的项目中,我也将整个消息(xml)包括在负载中,分配了一个ID,因此当手机连接到我的服务器时,我们仍然可以跟踪他没有收到的消息,在极少数情况下GCM失败。 - Chor Wai Chun
@Piovezan,我对你的评论有些疑惑(我对这一切都很陌生),因为我刚刚在应用程序管理器中测试了关闭WhatsApp并清除RAM,但它仍然可以正常接收消息。当WhatsApp完全关闭时,它是如何保持连接的?或者当手机刚刚启动时呢? - John
@John 当应用程序关闭时 -- 我不确定。 当手机刚启动时 -- 在启动时,系统会广播一个BOOT_COMPLETED事件,这可能会触发一个服务,该服务可以建立与服务器的连接并等待传入的消息。 - Piovezan
显示剩余2条评论
1个回答

2

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

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

它也不可扩展,尽管您可以将xml放入消息正文中并解析它。

我不确定交付的保证是什么,但我也会在Google方面检查一下,如果您使用它来传递多个消息,则需要确保将collapse_key函数合并到您的客户端中,因为如果发送延迟或使用高容量,则GCM将把您的消息合并成一个。

另外,我不确定GCM的实时性如何,因此我不确定它是否非常适合像真正的聊天应用程序那样的实时应用。

在使用GCM进行有效负载传递之前,请考虑这些事情。


我可以在Android中使用Jabber服务器吗?我是新手。 - Hardik Gajjar
1
这条消息/回答已经有一段时间了,但我正在考虑将消息传递到Push中,当消息被推送到应用程序时,触发一个Ajax或某种形式来向服务器确认已收到,但我只是想知道在GCM的中间和Ajax返回服务器之间,是否存在互联网连接“在传递数据的过程中”中断的可能性(在您的情况下,GCM接收到,然后连接中断,如何处理,服务器超时?重新发送GCM以触发连接?) - John
@John Jun 从记忆中来看,GCM 是一种“发出就算了”的方式,我不确定是否有消息传递的保证。 - James W
@John,你能否帮忙看一下这个问题:https://dev59.com/QZvga4cB1Zd3GeqP2nyL。虽然这样请求帮助不太好,但我真的需要一个解决方案。 - arslan haktic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接