Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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
只使用GCM为android开发聊天应用程序而抛弃XMPP好吗?_Android_Xmpp_Google Cloud Messaging - Fatal编程技术网

只使用GCM为android开发聊天应用程序而抛弃XMPP好吗?

只使用GCM为android开发聊天应用程序而抛弃XMPP好吗?,android,xmpp,google-cloud-messaging,Android,Xmpp,Google Cloud Messaging,很多应用程序,如WhatsApp依赖GCM在设备空闲或应用程序在后台运行时向设备发送通知。GCM消息只是告诉应用程序从服务器进行同步,然后使用XMPP进行实际聊天(传递有效负载)。但是依靠GCM发送消息是一个好的决定吗。因此,在我的例子中,当一个用户想要与另一个用户交谈时,他会向我的服务器发送一条消息,然后我通过GCM将消息传递给另一个用户。我理解GCM并非100%可靠,但我可以通过超时和确认消息来确保可靠性。如果我完全使用GCM,还有什么可能伤害我的吗。 不使用XMPP的原因是,扩展XMPP服

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

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

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

它也是不可扩展的,尽管您可能会将xml放在消息体中并对其进行解析

我不确定交付时的保证是什么,但我也会在谷歌方面检查一下,如果你使用它来交付多条消息,你需要确保你将
collapse\u key
功能整合到你的客户机中,因为如果你使用高质量的邮件发送延迟,GCM会将你的消息整合成一条音量

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


在使用GCM进行有效载荷传递之前,我会考虑这些问题。

取决于你的应用程序的性质,如果你打算在iPhone、Symbian等上扩展你的应用程序,依靠GCM听起来不太好。@ ChorWaiChun,如果想保持它只是Android,那么它是好的吗?到目前为止,我从我的服务器接收到任何GCM都没有失败,在我的项目中,我也将整个消息(xml)包含在有效负载中,并分配了一个ID,因此当手机连接到我的服务器时,我们仍然可以跟踪他没有收到的消息,这是一个罕见的GCM失败的案例。谷歌最近在其ccs选项中推出了带有XMPP支持的GCM。从外观上看,GCM连接和XMPP可靠性是两个方面的最佳选择“像WhatsApp这样的许多应用程序都依赖于GCM”——WhatsApp没有GCM的适当权限。它可能使用GCM背后的相同原理——保持与服务器的长时间连接以接收消息,即使在后台或手机处于休眠状态。传入的网络数据包将唤醒设备,使应用程序有足够的时间获得唤醒锁并保留消息。我可以在android i m new bee中使用jabber服务器吗?此消息/回答已经有一段时间了,但我正在考虑将消息传递到推送中,当消息被推送到应用程序中时,触发Ajax或某种表单来确认它已经接收到的服务器,但我只是想知道,是否有可能在“GCM”的中间,在AJAX返回服务器之前,Internet连接“在传递数据的中间”死亡。(在您的情况下,GCM已收到,然后连接断开,如何处理,服务器会超时?并重新发送GCM以触发连接?@John Jun From memory GCM是一个fire and forget,我不确定是否有保证消息)delivery@John你能看看这个问题吗?我知道这不是寻求帮助的好方法,但我真的需要一个解决方案。