Google如何实施推送通知功能?它是通过在后台运行的服务还是以不同的方式进行轮询来实现的?
答案 0 :(得分:154)
我在以色列举行的Android开发者大会上听到的内容:
在云服务器上,只有一个TCP套接字等待accept mode。 TCP连接已由Google Play应用程序启动。这就是为什么必须在设备上安装Google Play才能使Google Cloud Messaging (GCM)(以前的Android Cloud to Device Messaging Service - C2DM)正常工作。
当此TCP客户端套接字收到某些消息时,该消息包含诸如应该发送到的应用程序的软件包名称之类的信息,当然还包括数据本身。这些数据被解析并打包成一个intent,广播并最终由应用程序接收。
即使设备的无线电状态变为“空闲”模式,TCP套接字仍保持打开状态。不必运行应用程序即可接收意图。
的更多信息答案 1 :(得分:130)
Android与Google的服务器保持一个活动连接,但它不会使用太多电量或数据,因为在向手机上的应用发送Google Cloud Messaging(GCM)消息之前,不会发送任何流量。所有应用程序都使用手机上只有一个连接:安装使用GCM的新应用程序不会增加任何额外负载。
GCM的第一步是第三方服务器(例如电子邮件服务器)向Google的GCM服务器发送请求。然后,此服务器通过该打开的连接将消息发送到您的设备。 Android系统会查看消息以确定它的应用程序,并启动该应用程序。该应用必须已在Android注册才能使用GCM,并且必须具有相关权限。当应用程序启动时,它可能会立即使用消息中的数据创建通知。 GCM消息的大小非常有限,因此应用程序可能会打开与第三方服务器的正常连接以获取更多信息(例如,下载新电子邮件的标题)。
使用推送通知的优势在于,应用程序无需定期运行即可检查新数据,从而节省电量和数据。拥有像GCM这样的集中式机制的优势在于,设备只需要一个开放的网络连接,并且Android GCM系统是唯一需要继续运行的系统,而不是每个应用程序必须在后台保持运行才能保持自己的网络连接到自己的服务器。
答案 2 :(得分:9)
您可以使用长轮询tcp连接在Android上实现推送通知。 但这将涉及维持一个额外的socket =>电池耗尽。 或者,您可以使用警报管理器定期打开连接。
谷歌可能会为所有C2DM推送通知打开一个套接字,因此它的电池效率更高。
答案 3 :(得分:1)
是的,你是对的。谷歌有一项服务(GTalk服务),这项服务在一段时间内询问了谷歌服务器。
答案 4 :(得分:1)
自2018年4月10日起,Google已弃用GCM。 GCM服务器和客户端API已被弃用,并将于2019年4月11日删除。将GCM应用程序迁移到Firebase Cloud Messaging(FCM),它继承了可靠且可扩展的GCM基础架构以及许多新功能。
答案 5 :(得分:-3)
在Android设备上,当您收到推送通知时,发件人应用程序的图像和消息会显示在状态栏中。确切地说,当客户点击通知时,他/她便登陆了应用程序。