基于android百度云推送务设计.docx
- 文档编号:13183599
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:73
- 大小:707.34KB
基于android百度云推送务设计.docx
《基于android百度云推送务设计.docx》由会员分享,可在线阅读,更多相关《基于android百度云推送务设计.docx(73页珍藏版)》请在冰点文库上搜索。
基于androidXX云推送务设计
android
XX云推送设计
XXXX
2014年03月
第一章
简介
我来说几句吧,本来我只是想记录下的可结果写到了现在。
在XX官网部分东西说得不是特别详细,我这篇文章就当是XX云推送的一个参考设计吧。
因为我也确实这么走了过来,确实可以实现功能。
尤其有些用户需要开发针对单台手机单个账号的情况,如何使用userIDchannelId来区别不同是手机,最后实现不同的推送。
我这里都有个介绍实现和详解。
服务器端的代码有贴上,但是我这个只是针对android有时间的话我写点关于IOS方面的。
下面有服务器demo和android推送接收的截图。
左边是服务器的想XX云推送发的,右边是我们项目中接收到的。
图1.服务器客户端
第二章
云推送
二.1云推送是什么
云推送(Push)是XX云平台向开发者提供的消息推送服务;通过云端与客户端之间建立稳定、可靠的长连接来为开发者提供向用户端实时推送消息的服务。
XX云推送服务支持推送三种类型的消息:
通知、透传消息及富媒体;支持向所有用户或根据标签分类向特定用户群体推送消息;支持更多自定义功能(如自定义内容、后续行为、样式模板等);提供用户信息及通知消息统计信息,方便开发者进行后续开发及运营。
二.2云推送的价值
1.随时随地了解最新资讯。
2.低资费
3.实时性
采用TCP长连接,BP激活AP的方式,AP可休眠,手机可休眠,省流量省电量。
二.3XX云推送特点和优势
1、最省:
省电、省流量、零成本
XX云推送采用单一终端中的多个应用共享一个XX云推送服务进程和一条TCP长连接,最大化的降低客户端的资源消耗,省电省流量。
此外XX云推送的消息推送服务完全免费,开发者使用零成本。
2、最稳定:
消息到达率超98%
XX云推送后台拥有强大的服务器集群,具有极高的吞吐能力,您的消息将以最快的速度送达用户端。
XX云推送长期为XX搜索、地图、新闻等数十个千万级应用提供稳定、安全的服务支持,有效验证了云推送服务的稳定性与安全性,经内部测试消息到达率超98%。
3、最便捷:
强大的推送控制台
XX云推送为开发者准备了强大的管理后台,开发者可以在后台可以轻松便捷的操作消息推送以及查看用户的信息统计。
二.4架构设计和技术点
多应用共用同一个SDK,同一个进入层。
第三章
客户端篇之Demo测试
三.1开发前准备的工作
在做基于SDK的开发中一般都会有开发者账号注册,所以必须去注册一个XX开发者账号。
这个我这里就不多说了,推荐个网址应该可以完成注册。
网址:
。
除了注册开发者账号外,还必须安装android的开发环境,具备这一个条件就可以做下面的工作了。
本节中主要讲解如何从XX开发者中心下载并使用XX提供在Demo。
多余的话就不说了直接进入主题。
三.2下载示例
具备了开发者账号后就进入XX开放云平台,下面的这个网址是开发指南:
。
原则上说是可以根据这个指南就可以成功运行XX提供的示例程序,但是个人感觉说得不够详细,我就自己的经历写下如下步骤。
当进入如上的网站后,点击右上角的登录,成功后就后在右上角显示管理控制台
。
点击管理控制台进入轻应用管理,再点击如图的箭头
就可以显示如图1.1移动应用管理分类,点击移动应用管理进入如下图1.2应用管理。
图1.1移动应用管理分类
图1.2移动应用管理
点击
进入如下界面,填写应用名称,例如推送测试2,点击保存。
图1.3接入移动应用
点击管理控制台进入轻应用管理,再点击如图的箭头
就可以显示如图1.1移动应用管理分类,点击开发者服务管理进入图1.4,其中的推送测试2就是刚才新建的。
图1.4开发者服务管理
点击推送测试2进入图1.5中记录红圈ID,后面会写入到程序中。
图1.5基本信息
package="com.baidu.push.example"
图1.6推送设置
在这里第一次使用的时候可能不知道应用包名是什么,那就先来介绍XX云推送的SDK。
从该网址下载android版本的客户端SDK包及应用Demo:
。
下面并解压包目录如下\Baidu-Push-SDK-Android-L2-3.2.0\Demo,将Demo导入到eclipse中。
如果出现编译报就将编码改成UTF-8的,一般就不会报错了。
这样把示例程序运行到手机中,会发现程序接收不到XX云在推送。
是因为还要修改mainfest.xml中在api_key的值就是刚才推送测试2中基本信息APIkey见图1.5中的红圈。
我的修改如下:
再次运行就可以接收XX云推送的消息了。
下一节介绍详细测试过程。
三.3推送功能测试
手机上运行pushdemo软件,进入XX云开发者服务管理,在工程名称中选择刚才的推送测试2。
点击左边的云推送如图1.7;
图1.7云推送
点击通知,进入如下图1.8,在标题和消息内容中填写相关内容,最后也是最关键的时候到了,最好将pushdemo运行到后台或者说退出,这样你才能更加形象的感受到推送功能,好了点击图中的发送,大概1秒的时间,你就会听到声音,说明你收到了推送,如图1.9测试结果,这个消息和图1.8中的内容不对应,因为结果是我第二天。
关于消息和媒体的测试我这就不说了,我测试过要可以的。
图1.8新建通知
图1.9测试结果
第四章
客户端篇之分析
四.1XX云推送流程
XX云推送采用单一终端中的多个应用共享一个XX云推送服务进程和一条TCP长连接,最大化的降低客户端的资源消耗,省电省流量。
主要通过这个TCP长连接使得XX云服务器和设备之间建立单一通道,服务器直接向设备推送消息。
推送流程主要是:
公司的服务器向XX云推送服务器发出推送,然后XX云推送直接向对应设备ID发送推送消息,设备接收到消息后直接处理。
开发者可以根据自己的情况使用通知还是消息来推送,通知直接由系统来处理,每条都会通知,而消息可以由自己来处理。
XX云推送集成到开发者自己的系统中,会有自己的应用,比如说,我只想往特定的用户发送消息。
在XX的网页说有说使用userID和channelID,但是很多在纠结怎么获取到,其实在onBind方法中可以获取XX云推送过来的两个ID号,然后直接发送自己的服务器,这样就可以控制往特定的设备发送告警信息了。
四.2XX云推送demo框架
从XX云下载过来的androidDemo包,主要包括6个JAVA文件类,其实大部分是可以去掉的,只有2个是必须要用的后面我会弄一个最精简的demo给大家用。
MyPushMessageReceiver.java这个类是最核心的,用来接收XX云推送的消息。
DemoApplication这个类可以用来启动和停止推送。
而MyPushMessageReceiver用来接收消息和通知。
这个是3个界面,删除关系也不是很大,对于推送来说没有影响。
还有有就是通用的一些函数,类似个工具类,
这个类也是可以去除的。
下面就是libs和mainfest.xml这个里面是配置推送的,很多时候会设置出错,在后面的推送应用中我会介绍哪些是有用的。
第五章
客户端篇之开发基础
五.1概述
云推送(Push)是XX开放云向开发者提供的消息推送服务;通过利用云端与客户端之间建立稳定、可靠的长连接来为开发者提供向客户端应用推送实时消息服务。
XX云推送服务支持推送三种类型的消息:
通知、透传消息及富媒体;支持向所有用户或根据标签分类向特定用户群体推送消息;支持更多自定义功能(如自定义内容、后续行为、样式模板等);提供用户信息及通知消息统计信息,方便开发者进行后续开发及运营。
目前单条消息支持最大4K的消息推送功能,兼容文本和二进制消息格式。
如果应用有超过4K数据推送的需求,则应用可以在推送的消息里携带资源的URL地址,客户端在接收到消息后,主动对这个超过4K的数据发起另外一次请求。
五.2JSON
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。
它基于JavaScript(StandardECMA-2623rdEdition-December1999)的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。
这些特性使JSON成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成。
五.2.1JSON语法
JSON语法是JavaScript语法的子集。
[1]
五.2.1.1JSON语法规则
JSON语法是JavaScript对象表示语法的子集。
●数据在名称/值对中
●数据由逗号分隔
●花括号保存对象
●方括号保存数组
五.2.1.2JSON名称/值对
JSON数据的书写格式是:
名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
1"firstName":
"John"
这很容易理解,等价于这条JavaScript语句:
1firstName="John"
五.2.1.3JSON值
JSON值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true或false)
数组(在方括号中)
对象(在花括号中)
Null
五.2.2基础结构
JSON有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
1、对象:
对象在js中表示为“{}”括起来的内容,数据结构为{key:
value,key:
value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
2、数组:
数组在js中是中括号“[]”括起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
五.2.3基础示例
简单地说,JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。
这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且JSON可以表示比"名称/值对"更复杂的结构。
例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
名称/值对
按照最简单的形式,可以用下面这样的JSON表示"名称/值对":
{"firstName":
"Brett"}
这个示例非常基本,而且实际上比等效的纯文本"名称/值对"占用更多的空间:
firstName=Brett
但是,当将多个"名称/值对"串在一起时,JSON就会体现出它的价值了。
首先,可以创建包含多个"名称/值对"的记录,比如:
{"firstName":
"Brett","lastName":
"McLaughlin","email":
"aaaa"}
从语法方面来看,这与"名称/值对"相比并没有很大的优势,但是在这种情况下JSON更容易使用,而且可读性更好。
例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
表示数组
当需要表示一组值时,JSON不但能够提高可读性,而且可以减少复杂性。
例如,假设您希望表示一个人名列表。
在XML中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为person1-firstName这样的形式。
如果使用JSON,就只需将多个带花括号的记录分组在一起:
{
"people":
[
{"firstName":
"Brett","lastName":
"McLaughlin","email":
"aaaa"},
{"firstName":
"Jason","lastName":
"Hunter","email":
"bbbb"},
{"firstName":
"Elliotte","lastName":
"Harold","email":
"cccc"}
]
}
这不难理解。
在这个示例中,只有一个名为people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。
上面的示例演示如何用括号将记录组合成一个值。
当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{"programmers":
[
{"firstName":
"Brett","lastName":
"McLaughlin","email":
"aaaa"},
{"firstName":
"Jason","lastName":
"Hunter","email":
"bbbb"},
{"firstName":
"Elliotte","lastName":
"Harold","email":
"cccc"}
],
"authors":
[
{"firstName":
"Isaac","lastName":
"Asimov","genre":
"sciencefiction"},
{"firstName":
"Tad","lastName":
"Williams","genre":
"fantasy"},
{"firstName":
"Frank","lastName":
"Peretti","genre":
"christianfiction"}
],
"musicians":
[
{"firstName":
"Eric","lastName":
"Clapton","instrument":
"guitar"},
{"firstName":
"Sergei","lastName":
"Rachmaninoff","instrument":
"piano"}
]}
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。
但是还应该注意,在不同的主条目(programmers、authors和musicians)之间,记录中实际的名称/值对可以不一样。
JSON是完全动态的,允许在JSON结构的中间改变表示数据的方式。
在处理JSON格式的数据时,没有需要遵守的预定义的约束。
所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
五.2.4具体形式
1、对象是一个无序的“‘名称/值’对”集合。
(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。
(2)每个“名称”后跟一个“:
”(冒号);
(3)“‘名称/值’对”之间使用“,”(逗号)分隔。
例子:
表示人的一个对象:
{
"姓名":
"大憨",
"年龄":
24
}
2、数组是值(value)的有序集合。
(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。
(2)值之间使用“,”(逗号)分隔。
例子:
一组学生
{
"学生":
[
{"姓名":
"小明","年龄":
23},
{"姓名":
"大憨","年龄":
24}
]
}
说明:
此Json对象包括了一个学生数组,而学生数组中的值又是两个Json对象
3、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。
4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。
一个字符(character)即一个单独的字符串(characterstring)。
字符串(string)与C或者Java的字符串非常相似。
5、数值(number)也与C或者Java的数值非常相似。
除去未曾使用的八进制与十六进制格式。
除去一些编码细节。
五.2.5校验工具
JSON格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中。
但是国人的一款在线工具BeJson给众多程序员带来了一阵凉风。
五.3JSON解析
五.3.1Json解析实例
我在用XX云推送的时候只用到一个2条类型的json格式数据,我用这个作为我们的协议,然后来解析这个数据获取我们需要的字段数据。
具体协议定义我们暂时只用了2个一般都是足够了,我是使用消息的方式去发送的,自己控制是否有通知,这样的操作比较方便。
json协议定义下面讨论。
五.3.2推送告警json协议
推送告警接收到的消息:
{"info":
[{"DevId":
"AX-DSW-2012081000065","DevSn":
"012345678","Channel":
"0","Time":
"2014-03-2710:
14:
57","WType":
"537406354","FType":
"16","AreaName":
"遥控器","Locate":
"沃尔玛广场"}]}
DevId:
设备ID号
DevSn:
设备SN
Channel:
通道号
Time:
告警时间
WType:
告警方式,参考附件表A
FType:
文件类型,参考附件表B
AreaName:
防区名称,
协议解析:
使用如下所示的代码可以实现该条json协议,我是为以后考虑才做成一个对象数组的形式:
try{
JSONArrayjxxJsonObject=newJSONObject(json).getJSONArray("msg");
for(inti=0;i JSONObjectjo=(JSONObject)jxxJsonObject.opt(i); devID=jo.getString("DevId"); snString=jo.getString("DevSn"); chnnelString=jo.getString("Channel"); timeString=jo.getString("Time"); msgTypeString=jo.getString("MsgType");//MsgType%DevId%DevSn%Channel%Time msgString=msgTypeString+"%"+devID+"%"+snString+"%"+chnnelString+"%"+timeString; //sendDevStateUpdate(msgString); AlarmHandleramAlarmHandler=AlarmHandler.getInstance(); amAlarmHandler.devStateChangeNotify(devID,snString,msgTypeString);} returnretString; }catch(JSONExceptione){ e.printStackTrace(); } 五.3.3设备变更json 状态变更消息 message="{"msg": [{"DevId": "AX-DSW-2012081000065","DevSn": "012345678","Channel": "0","Time": "2014-03-2709: 53: 03","MsgType": "33024"}]}" 该条协议的解析如下: try{ JSONArrayjxxJsonObject=newJSONObject(json).getJSONArray("info"); for(inti=0;i JSONObjectjo=(JSONObject)jxxJsonObject.opt(i); devID=jo.getString("DevId"); currentAlarmDevID=devID; //jo.getString("DevId"); snString=jo.getString("DevSn"); chnnelString=jo.getString("Channel"); timeString=jo.getString("Time"); currentAlarmTime=timeString; areaType=jo.getString("WType"); fTypeString=jo.getString("FType"); armName=jo.getString("AreaName"); locaString=jo.getString("Locate"); retString="您装在"+locaString+"的设备"+devID+"于"+timeString +"时发生"+areaType+"告警! "; mApplication.saveAlarmInfo(devID,snString,locaString, chnnelString,timeString,areaType,fTypeString, armName); } returnretString; }catch(JSONExceptione){ e.printStackTrace(); } 第六章 客户端篇之推送开发 这一章节中我会写下我在使用XX云推送中遇到问题及效率情况,我已经在两个项目中集成了XX云推送功能了。 六.1XX云推送demo裁剪 在上面一节中我就有提到过把从XX云官网下载的android推送demo精简下。 这里刚好和大家一起来做做,我这个下面的截图就是精简好的,有需要这个DEMO的可以从XX网盘去下载,我会提供地址。 这里来说说如何来精简。 6.1XX云推送精简demo 六.1.1Activity裁剪 XX云推送带的这些activity都是为了demo演示而设计的,实际在我们的项目中是用不到的,我们可以将其删除并且在mainfest.xml中将其删除掉。 可以照常运行起来,不会有什么问题。 主要删除的类: LoginActivity.java、CustomActiv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 android 百度 推送 设计