移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)

 金诚   2017-11-19 07:59   23 人阅读  0 条评论

本文主要内容由微信开发团队人员编写,来自 WeMobileDev,感谢。

GCM特点

  • a)Android2.2以下的手机不支持GCM,2.2到3.0需要安装Google Store并设置Google帐号,4.04及以上版本不需要设置帐号也能支持。
  • b)GCM只传递数据(可以传递小于4kb的数据),对这些数据的处理可以全部由开发者控制。
  • c)Android应用不需要运行就可以接收消息(通过Android广播)。
  • d)GCM不保证发送的消息的顺序,也不保证消息一定能够推送到手机。

GCM心跳策略以及存在的问题

  • a)用心跳保活长连接,心跳间隔为WIFI下15分钟,数据网络下28分钟。
  • b)Google可以改变所有Android设备的心跳间隔值(目前还未改变过)。
  • c)GCM由于心跳间隔固定,并且较长,所以在NAT aging-time设置较小的网络(如联通2G,或有些WIFI环境下)会导致TCP长连接在下一次心跳前被网关释放。造成Push延迟接收。

GCM的可用性及稳定性

目前测试发现GCM在国内可用性不高,原因有:

  • a) Android很多被手机厂商定制化,厂商可能会去掉GCM服务。
  • b) Android2.2到3.0之间需要安装Google Store并设置Google帐号。
  • c)由于国内2G和移动3G的NAT超时时间都小于GCM心跳时间(28分钟),TCP长连接必然无法保活,每次都要等28分钟心跳失败重连后才能收到Push。
  • d)某些运营商可能限制了5228端口,移动3G/2G下,发现几乎无法连接上GCM服务器,也就无法获得GCM通知,WhatsApp放后台10分钟后,经常很长时间都收不到Push消息。

在美国3G网络下抓包的24小时,GCM的连接极其稳定,24小时内GCM长连接未曾断过,在台湾3G网络下抓包14个小时,GCM连接也只断过一次。WhatsApp用户在此类地区网络下客户端可以获得很及时的Push通知。

在中国电信3G下抓包,大部分时间GCM连接都比较稳定,只会因为偶尔的DHCP造成断连现象,由于频率很低(平均数小时才发生一次),对Push体验的影响不大。

GCM Server类型

GCM提供两种Server模型:

  • a)HTTP Server : 使用同步接口发送HTTP请求,一次请求可以发给最多1000个设备。
  • b)XMPP Server :使用异步接口发送请求,只支持对单个设备(或同一个用户的多个关联设备发送),发送请求并发数须小于1000,支持设备到云端Server发送数据。需要Google将我们的发送Server加入白名单。
本文地址:http://www.yangchaofan.cn/archives/2291
版权声明:本文为原创文章,版权归 金诚 所有,欢迎分享本文,转载请保留出处!

说点什么

avatar
  Subscribe  
提醒