文档章节

android消息推送

z_jordon
 z_jordon
发布于 2015/02/26 18:10
字数 1094
阅读 66
收藏 1

最近的一个项目要涉及到从服务端往客户端推送消息,类似于滴滴打车的司机端,有新的订单时就往司机的手机推送订单信息。

最开始的想法时自己来实现服务端到客户端的推送,具体如下:

  1. 客户端启动时连上服务端,注册自己的设备id,用户id等信息,并通过socket与服务端维持一个长连接

  2. 服务端在有新的消息时通过这个长连接往客户端推送消息

这个方案看似简单,但仔细推敲起来有许多细节不可控,比如需要考虑各种网络环境,客户端与服务端程序的稳定性,实际上要自己来实现一个稳定的消息推送服务是要花比较长时间的,虽然也有一些现成的方案,比如Google提供的C2DM(Cloudto Device Messaging)服务,采用MQTT协议实现Android推送,采用XMPP协议实现Android推送等(这些网上都可以找到相应的资料),但对于我们现在的项目来说还是需要自己搭建消息推送的服务端和客户端。

然后在网上找了一下原来已经有各种现在的免费的方案了,比如百度推送,极光推送等等,并且文档和demo都比较齐全,这种方案的具体机制如下(以百度推送为例):

 1. 客户端启动时连接上百度推送的服务器,百度推送服务会生成注册设备的设备id,用户id等信息,并通过ocket与百度推送服务端维持一个长连接。

 2.客户端把获取到的百度推送服务生成的设备id,用户id等信息以及自己本身在系统中的用户id(一般这种系统都有个登录的过程的),通过http请求传到服务端进行绑定

3. 服务端在有新的消息时,通过http请求把消息发送到百度服务端

4.百度服务端再把消息通过第1步建立的长连接推送到对应的客户端上

最后再与同事沟通后,考虑到百度推送有时不够稳定,不能保证每次推送都能送到,而且有些可能会有丢失的现象,于是只使用百度推送推送打招呼的信息,然后客户端再通过http请求直接到服务器上去取新消息,这样即使中间有一个新消息遗漏了导致没往客户端发送打招呼信息,但下一次有新的信息时还是可以取到上次遗漏的信息的,于是整个过程变成如下:

1. 客户端启动时连接上百度推送的服务器,百度推送服务会生成注册设备的设备id,用户id等信息,并通过ocket与百度推送服务端维持一个长连接。

 2.客户端把获取到的百度推送服务生成的设备id,用户id等信息以及自己本身在系统中的用户id(一般这种系统都有个登录的过程的),通过http请求传到服务端进行绑定

3. 服务端在有新的消息时,通过http请求发一个打招呼的信息到百度服务端

4.百度服务端再把打招呼消息通过第1步建立的长连接推送到对应的客户端上

5.客户端再发起一个http请求去服务端获取最新的消息列表

但这种机制相对来说就没有那么实时,并且对服务端的压力也比较大,象滴滴打车这种肯定是不适合的,但对于我们项目是足够了。

如果要自己搭建消息推送的机制可参考以下文章:

Android消息推送完美解决方案全析

Android推送通知机制分析

Android消息推送机制

移动手机消息推送机制[转载]

如果想使用百度推送,可参考百度的文档:

http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/scene


© 著作权归作者所有

共有 人打赏支持
z_jordon
粉丝 36
博文 251
码字总数 78212
作品 0
厦门
技术主管
私信 提问
Android消息推送完美方案

推送功能在手机应用开发中越来越重要,已经成为手机开发的必须。在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折。本文就是用来和大家共同探讨一种Android消息...

Yujan
2014/04/10
0
0
真的来了!工信部将成立安卓统一推送联盟

上个月,工信部旗下泰尔实验室发布消息称,将在国内联合多家厂商制定安卓统一推送服务(Unified Push Service,简称UPS)技术标准,旨在为国内的消息推送服务建立统一的标准,为终端用户提供...

王练
2017/07/20
6.7K
107
Android P正式版即将到来:后台应用保活、消息推送的真正噩梦

1、前言 对于广大Android开发者来说,Android O(即Android 8.0)还没玩热,Andriod P(即Andriod 9.0)又要来了。 下图上谷歌官方公布的Android P发布路线图: Android P的最后一个开发者预...

首席大胸器
2018/08/02
273
0
Android P正式版即将到来:后台应用保活、消息推送的真正噩梦

1、前言 对于广大Android开发者来说,Android O(即Android 8.0)还没玩热,Andriod P(即Andriod 9.0)又要来了。 下图上谷歌官方公布的Android P发布路线图: Android P的最后一个开发者预...

JackJiang2011
2018/08/02
0
0
Android 推送通知指南

在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比...

鉴客
2011/10/16
32.7K
35

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部