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

时间:2017-03-13 17:40:08

标签: android push-notification xmpp openfire smack

我一直在Android应用中使用GCM进行推送通知,但出于安全限制,我有义务避免使用GCM并使用本地推送服务器,我已经找到了很多这个问题的答案但是没有一个是结构良好的,我希望得到一个明确的答案,逐步使用一些XMPP服务器和客户端库来完成这个主题

1 个答案:

答案 0 :(得分:1)

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

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

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

  1. 移动设备资源有限:当您打开多个TCP连接时,它会快速耗尽电池
  2. 移动设备具有持久的网络连接:您应该关注蜂窝和/或wifi网络的变化(并且还会产生电池影响),并且您不应该在这些不稳定的环境中丢失任何消息。
  3. 为了解决这些问题,Apple,Google(以及他们的次要竞争对手)提供“通知服务”。它们包括:

    1. 系统范围的后台应用程序(“服务”),可与Apple / Google“通知”基础结构服务器保持连接。
    2. 供开发人员使用的API,用于在服务器端和客户端“注册”他们的应用程序:服务器端应用程序将所有事件发送到Apple / Google,并且您的客户端应用程序从该系统服务接收“推送”,您无需关心网络中断和电池影响 - 所有问题都由OS制造商处理。
    3. 但是当你试图“避免GCM”时,你会得到所有关心的东西,加上:

      1. 您的“手工”持久性网络服务会干扰Google的一个,并且至少会双重网络和电池使用量(甚至更多,只是因为您的实施会有错误/其他角落已经由Apple / Google大型工程团队解决的案例

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

      3. 所以,总结一下:

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