Android消息推送解决方案
进餐馆还没打开 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 实现,客户端和服务器都有。不足也很明显:
-
时间过长就再也收不到推送。 -
性能不够稳定。 -
消息从服务器推出去就不再管,不管有没有到手机上。
要用 androidpn,还得理解 XMPP、理解它的实现,再调内部 BUG。
6. 第三方平台
国内外都有推送平台,但收费、保密、服务质量、扩展等问题,又让人却步。百度云推送可参考:Android推送 百度云推送 入门篇
| 方案 | 类型 | 要点 |
|---|---|---|
| 轮询 | Pull | 定时问服务器,费电费流量 |
| SMS | Pull | 拦截短信当命令,成本高 |
| 持久连接 | Push | 实时,但连接不稳 |
| C2DM | Push | 依赖 Google,国内常不可用 |
| XMPP / androidpn | Push | 开源完整,超时、稳定、送达都要自己补 |
| 第三方平台 | Push | 省事,要权衡收费、保密、扩展 |
一句话总结:实时通知靠 Push 而不是轮询;国内别赌 C2DM,长连接、XMPP 或第三方平台都要先把稳定性和送达补齐。
转载请注明来源:Android消息推送解决方案







