博客
关于我
Android实现推送方式解决方案
阅读量:190 次
发布时间:2019-02-26

本文共 1320 字,大约阅读时间需要 4 分钟。

Android推送功能实现方案探讨

在移动互联网时代,推送功能已经成为手机应用程序中不可或缺的一部分。从新闻客户端实时推送最新消息,到即时通讯应用的消息提醒,推送功能为用户提供了便捷的信息获取方式。然而,随着推送服务的普及,也带来了诸多挑战。本文将探讨Android平台中实现推送功能的基础知识及多种解决方案。

推送方式基础知识

在移动互联网的早期,手机用户如果希望获取通知或新信息,通常需要手动打开应用程序或等待提醒。随着技术的进步,推送功能逐渐成为移动应用的核心特性。推送功能最初在Email中应用,用于通知新邮件到来,但随着移动互联网的发展,推送功能逐渐普及到各类移动应用中。

在开发需要与服务器交互的应用时,获取服务器端数据的方式主要有两种:Pull(拉)和Push(推送)。Pull方式通过定期连接服务器,获取最新数据,虽然简单,但效率较低,容易占用大量网络流量和电池资源。相比之下,Push方式实现了实时通知,显著提升了用户体验。

常见推送解决方案

  • 轮询(Pull)方式

    轮询方式通过定期连接服务器,主动获取最新数据。优点是实现简单,缺点是对网络和电池资源的高消耗,且可能导致消息延迟。

  • 短信(SMS)推送

    Android平台支持拦截短信并解析内容,用于推送通知。该方式实现实时操作,但需向移动公司缴纳费用,且免费服务难以获取。

  • 持久连接(Push)方式

    通过保持与服务器的长期连接,实时接收消息。这种方式优于轮询,但在Android中存在诸多限制,如系统可能随时Kill推送服务,影响稳定性。

  • C2DM推送方案

    Google提供的C2DM(Cloud to Device Messaging)服务曾被尝试,但存在多个限制:

    • 兼容性问题,仅适用于Android 2.2及以上版本。
    • 依赖Google服务器,国内环境下使用不便。
    • 在部分国产手机中可能无法运行。

    因此,最终放弃C2DM,选择自行开发通信协议。

    MQTT协议推送方案

    MQTT协议是一种轻量级的消息发布/订阅协议,适合实现基于客户端的推送服务。通过wmqtt.jar库和RSMB代理,构建推送架构。该方案适合对协议有一定了解的开发者,需自行搭建服务器和配置客户端。

    XMPP协议推送方案

    基于XMPP协议的AndroidPN开源项目提供了完整的推送解决方案。其优势在于无需依赖Google服务,且协议扩展性强。项目包括客户端和服务器端,服务器基于Openfire修改开发,支持消息推送和用户认证。

    第三方平台推送方案

    使用第三方平台如极光推送(目前免费),可以快速实现推送功能。国内推送平台如云巴(由极光推送的创始人开发)也值得关注。第三方平台需依赖其服务器,需注意数据隐私和服务稳定性。

    搭建自有推送平台

    搭建自有推送平台需要开发消息代理服务器,支持消息接收和转发。虽然工作量大,但提供高度定制化,适合有特定需求的场景。

    总结

    在选择Android推送方案时,需综合考虑成本、依赖性、维护难度和扩展性。无论是利用现有开源项目、第三方服务,还是自行搭建平台,都有各自的优劣 trades-off。开发者应根据项目需求,选择最适合的方案,确保推送服务的稳定性和可靠性。

    转载地址:http://dpyu.baihongyu.com/

    你可能感兴趣的文章
    Ploly Dash,更新一个Dash应用程序JJJA上的实时人物
    查看>>
    Ploly烛台的定制颜色
    查看>>
    Ploly:如何在Excel中嵌入完全交互的Ploly图形?
    查看>>
    plotloss记录
    查看>>
    Plotly (Python) 子图:填充构面和共享图例
    查看>>
    Plotly 中的行悬停文本
    查看>>
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>