在不使用 GCM 的情况下在 android 中推送通知

Posted

技术标签:

【中文标题】在不使用 GCM 的情况下在 android 中推送通知【英文标题】:Push notifications in android without using GCM 【发布时间】:2017-03-13 17:40:08 【问题描述】:

我一直将 GCM 用于 android 应用程序中的推送通知,但出于安全限制,我不得不避免使用 GCM 并使用本地推送服务器,我已经找到了很多关于这个问题的答案,但没有一个是好的结构化的,我希望得到一个明确的答案,逐步使用一些 XMPP 服务器和客户端库来解决这个主题

【问题讨论】:

出于数据安全方面的考虑,请考虑寻找可以在本地自托管且不依赖 GCM 的推送通知产品。 Pushy (pushy.me) 就是这样做的,并且不依赖于 Google Play 服务。全面披露 - 我是 Pushy 的创始人兼首席执行官。 【参考方案1】:

您可能不完全了解什么是 GCM 以及 GCM 的设计目的。

传统上,每个桌面应用程序都会建立自己的 TCP 连接到自己的服务器,就像您可以连接到 Openfire 实例并在需要时发送/接收消息,而无需任何第三方服务。

这种方法在移动环境中有很多问题:

    移动设备资源有限:当您打开许多 TCP 连接时,它会很快耗尽您的电池电量 移动设备具有持久的网络连接:您应该关心蜂窝和/或 wifi 网络的变化(并且它也会影响电池),并且您不应该在这些不稳定的环境中丢失任何消息。

为了解决这些问题,Apple、Google(以及它们的次要竞争对手)提供了“通知服务”。它们包括:

    系统范围的后台应用程序(“服务”)保持与 Apple/Google“通知”基础架构服务器的连接。 开发人员 API,在服务器端和客户端“注册”他们的应用程序:您的服务器端应用程序将所有事件发送到 Apple/Google,并且您的客户端应用程序接收来自该系统服务的“推送”,您无需关心网络中断和电池影响 - 所有问题都由操作系统制造商处理。

但是,当您尝试“避免 GCM”时,您会得到所有需要您照顾的东西,此外:

    您的“手工”持久网络服务会干扰 Google 的服务,并且至少会加倍使用网络和电池(甚至更多,只是因为您的实现会出现错误/其他问题Apple/Google 大型工程团队已经解决的案例)

    您的应用程序将变得更加复杂,并且您将遇到更多的安全问题(因为安全问题现在也由您处理)和糟糕的用户体验(具有“自己的”网络的应用程序通常具有糟糕的 UX 设计,例如用网络错误消息提示和无聊的最终用户)。

所以,总结一下:

    是的,从技术上讲,您可以使用 smack 库并连接到 Openfire 服务器。基本上它与 GCM 的工作原理相同。 不,在 99.9999% 的情况下,您应该这样做。除非您是一家开发竞争性移动平台的大公司。

【讨论】:

想你的答案,我想你澄清了一些要避免的问题。

以上是关于在不使用 GCM 的情况下在 android 中推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Eclipse 的情况下在 Android 上安装/替换

无法在不单击标记的情况下在 GoogleMap 中显示信息窗口 - GoogleMap Cluster Android

如何在不发送消息的情况下在 Android 中打开默认电子邮件客户端?

在不连接计算机的情况下在 Android 上检查元素

如何在不先保存的情况下在 Android 中发送 zip 文件?

如何在不登录的情况下在 Android 中发布到 Facebook Wall?