Android消息推送解决方案

    |     2016年3月7日   |   Android经验   |     0 条评论   |    1773

进餐馆还没打开 App,手机就弹出打折消息——坐标早就在库里,服务端匹配后再 Push 下来。问题不在 GPS,而在服务端怎么把消息实时送到客户端。


一、消息推送基础

消息推送,是在网上定期把用户需要的信息送过去,减少信息过载。它按兴趣搜索、过滤,再定期推给用户。移动应用跟服务器交互时,既要上传,也要从服务器拿数据。

一般情况下客户端是主动方。服务器数据更新了、要下发通知,只能等客户端下次连上——消息就丢了实时性。

要让客户端实时收到通知,大体两条路:

  • Pull(拉):隔一段时间去服务器问有没有更新。
  • Push(推):服务器有新信息就推到客户端,客户端自动收到。

都能拿到更新,但 Push 更合适:Pull 更费流量和电,还得程序不停盯着服务端。


二、几种常见方案

1. 轮询(Pull)

客户端定时向服务器发询问,服务器有变化就立刻同步。实现简单,费电费流量。

2. SMS(Pull)

拦截短信并解析内容,当作服务器命令。一旦有变化就同步。用户经济上很难承受,还要短信平台配合。

3. 持久连接(Push)

客户端和服务器建长连接,消息及时、实时;缺点是连接不稳定。

4. C2DM 云端推送

Google 提供 C2DM(Cloud to Device Messaging),帮开发者从服务器向 Android 应用发数据。机制轻量:服务器通知应用去跟服务器通信,拿更新和用户数据。

主要问题是必须依赖 Google 官方 C2DM 服务器,国内网络下经常不可用。

5. XMPP 实现 Android 推送

官方 C2DM 底层也是 XMPP。XMPP(可扩展通讯和表示协议)基于 XML,用于即时消息和在线探测。

androidpn 是基于 XMPP 的 Java 开源 Android push 实现,客户端和服务器都有。不足也很明显:

  1. 时间过长就再也收不到推送。
  2. 性能不够稳定。
  3. 消息从服务器推出去就不再管,不管有没有到手机上。

要用 androidpn,还得理解 XMPP、理解它的实现,再调内部 BUG。

6. 第三方平台

国内外都有推送平台,但收费、保密、服务质量、扩展等问题,又让人却步。百度云推送可参考:Android推送 百度云推送 入门篇

方案 类型 要点
轮询 Pull 定时问服务器,费电费流量
SMS Pull 拦截短信当命令,成本高
持久连接 Push 实时,但连接不稳
C2DM Push 依赖 Google,国内常不可用
XMPP / androidpn Push 开源完整,超时、稳定、送达都要自己补
第三方平台 Push 省事,要权衡收费、保密、扩展

一句话总结:实时通知靠 Push 而不是轮询;国内别赌 C2DM,长连接、XMPP 或第三方平台都要先把稳定性和送达补齐。

转载请注明来源:Android消息推送解决方案
本文链接地址:https://ai.zhousir.top/?p=1446
回复 取消