为啥首选使用 GCM 进行推送通知?

Posted

技术标签:

【中文标题】为啥首选使用 GCM 进行推送通知?【英文标题】:Why it is preferred to use GCM for push notifications?为什么首选使用 GCM 进行推送通知? 【发布时间】:2015-07-27 04:29:28 【问题描述】:

我知道,就是这样。但我不明白,为什么?

为什么不定期向服务器发送查询?当然,它可能会使电池放电并增加互联网流量。我明白了。但是Google Cloud Messaging 的使用如何消除这个问题呢?

我找到了an answer。但这对我来说不是很清楚。

谁能给我一个明确的解释?

【问题讨论】:

【参考方案1】:

假设您的手机上有 50 个不使用 GCM 的应用程序。每个应用程序开发人员都认为每分钟轮询一次他们各自的后端是合适的。

由于这些都是独立的应用程序,每个调用可能不会与另一个 api 调用同时发生。对电池的最大伤害是当 android 设备中的无线电在关闭后必须重新打开以进行 API 调用时,因此在间隔时间段内发生的多次调用会更快地耗尽电池(阅读无线电状态机上的这篇文章以更好地理解为什么这是https://developer.android.com/training/efficient-downloads/efficient-network-access.html)

此外,每个应用程序都将访问一个单独的端点。每次进行 API 调用时,都必须完成给定服务器的连接过程。使用批处理 api 请求或 HTTP 2.0,无需重新进行握手或连接过程即可优化对同一服务器的多个调用。

现在想象一下,所有 50 个应用程序都使用了 GCM。 GCM 将代表所有 50 个应用程序以某个固定时间间隔轮询端点。假设 GCM 每分钟轮询一次服务器,所有相应应用程序的后端都会发送通知以发送到设备。您已将 50 个不同的可能会打开和关闭电池的奇怪定时 API 调用减少到一个 api 调用。您将使用更少的数据进行轮询。您不会承担对 50 个不同服务器的 HTTP 调用的连接步骤的成本。此外,谷歌正在使用相同的轮询检查操作系统更新,因此使用 GCM 不会产生额外的网络开销(此信息基于旧文档 What technology does GCM (Google Cloud Messaging) use?)

另外,请直接从 Android 网站上一篇题为“最小化定期更新的影响”(http://developer.android.com/training/efficient-downloads/regular_updates.html) 的文章中查看此解释:

每次您的应用轮询您的服务器以检查是否需要更新时,您都会激活无线电,不必要地消耗电力,在典型的 3G 连接上长达 20 秒。

Google Cloud Messaging for Android (GCM) 是一种轻量级机制,用于将数据从服务器传输到特定应用实例。使用 GCM,您的服务器可以通知在特定设备上运行的应用程序有可用的新数据。

与轮询相比,您的应用必须定期 ping 服务器以查询新数据,此事件驱动模型允许您的应用仅在知道有数据要下载时创建新连接。

结果是减少了不必要的连接,并减少了应用程序中更新数据的延迟。

GCM 是使用持久 TCP/IP 连接实现的。虽然可以实现自己的推送服务,但最好使用 GCM。这最大限度地减少了持久连接的数量,并允许平台优化带宽并最大限度地减少对电池寿命的相关影响。

【讨论】:

感谢您的经验分享!这对我来说是非常有用的信息。

以上是关于为啥首选使用 GCM 进行推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GCM 不在 android 设备中提供推送通知?

GCM iOS 没有收到推送通知

通过 GCM 使用 android 和 nodejs 进行地理定位推送通知

有时一些 android 用户没有通过 GCM 收到推送通知

配置 Openfire 服务器以支持 GCM 推送通知

GCM 推送通知不适用于 xamarin android