文档章节

android消息推送

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

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

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

  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
粉丝 35
博文 251
码字总数 78212
作品 0
厦门
技术主管
Android消息推送完美方案

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

Yujan
2014/04/10
0
0
Android 服务器推送技术

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

晨曦之光
2012/03/15
0
6
Android推送通知指南

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

LiSteven
2013/03/28
0
0
推送智能、 数据增能,个推助力中国安卓新生态的创建

近日,由国家发改委、工业和信息化部、中国科协指导,中国信息通信研究院主办,个推协办的“2018中国安卓开发者大会”在北京隆重召开。在这场国家级的行业盛会上,相关部委的领导、互联网领域...

个推君
07/16
0
0
Android实现推送方式解决方案

  本文介绍在Android中实现推送方式的基础知识及相关解决方案。推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅...

穆哥哥
2013/07/08
0
1
《小印记》源码分享--极光推送服务器篇

笔者这几天刚完成《小印记》的推送功能,今天特分享一下在做的过程中实际解决的问题。如果读者学到了有用的东西,希望能前往App Store下载《小印记》支持一下笔者,谢谢! 《小印记》iOS源码...

_子墨
2017/03/21
0
0
Android实现推送方式解决方案

本文介绍在Android中实现推送方式的基础知识及相关解决方案。推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最...

刘遇安
2014/08/28
0
0
Android实现推送方式解决方案

本文介绍在Android中实现推送方式的基础知识及相关解决方案。推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最...

军歌
2014/02/25
0
0
基于Android移动平台僵尸网络模拟工具设计与实现

移动端:基于Android系统开发的应用,表层应用是基于baiduMap 路线规划app 服务端:基于python web 开发框架 django 实现。 通信信道:基于第三方SDK Jpush推送消息+自己一套加密系统 推送原...

颓废的幻想者
2015/06/29
0
0
如何从Windows应用发送通知消息给Android应用

手机应用可以作为桌面应用的辅助工具,用来接收桌面应用的状态信息。这里介绍如何实现一个简单的Android程序用于接收Windows扫描仪应用的工作状态。 参考:How to Push Notifications to An...

yushulx
2014/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高效编写Dockerfile的几条准则

概述 Dockerfile 是专门用来进行自动化构建镜像的编排文件(就像Jenkins 2.0时代的Jenkinsfile是对Jenkins的Job和Stage的编排一样),我们可以通过 docker build 命令来自动化地从 Dockerfi...

小致dad
37分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
7
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
194
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部