在不使用 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 中打开默认电子邮件客户端?