在 android 中推送通知而不使用 GCM

Push notifications in android without using GCM

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

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

传统上,每个桌面应用程序都会建立自己的 TCP 连接到自己的服务器,就像您可以在不需要任何第三方服务的情况下连接到您的 Openfire 实例和 send/receive 消息一样。

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

  1. 移动设备资源有限:当您打开许多 TCP 连接时,它会很快耗尽电池电量
  2. 移动设备没有持续的网络连接:你应该关心蜂窝 and/orwifi 网络的变化(它也会影响电池),你不应该丢失这些不稳定环境中的任何消息。

为了解决这些问题,Apple Google(以及他们的小竞争对手)提供了 "notification services"。它们包括:

  1. 系统范围的后台应用程序 ("service"),它保持与 Apple/Google "notifications" 基础结构服务器的连接。
  2. API 对于开发人员,"register" 他们在服务器端和客户端的应用程序:您的服务器端应用程序将所有事件发送到 Apple/Google,您的客户端应用程序接收 "pushes" 从该系统服务中,您无需关心网络中断和电池影响 - 所有问题都由 OS 制造商处理。

但是,当您尝试 "avoid GCM" 时,所有事情都由您来照顾,另外:

  1. 您的 "handmade" 持久网络服务会干扰 Google 的网络服务,并且至少会 两倍 网络和电池使用(甚至更多,只是因为您的实施将有 errors/other 个角落案例,这些案例已经被 Apple/Google 个大型工程团队解决)

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

所以,总结一下:

  1. 是的,从技术上讲,您可以使用 smack 库并连接到 Openfire 服务器。基本上和 GCM 一样。
  2. 不,在 99.9999% 的情况下你应该走这条路。除非你是一家开发竞争性移动平台的大公司。