




免费预览已结束,剩余59页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
百度云推送百度云推送实践应用教程XXXX2014年 03 月目 录第一章 简介4第二章 推送52.1 推送基础简介52.2 几种常见方案实现原理:52.3 常见解决方案52.3.1 C2DM云端推送功能52.3.2 XMPP协议实现Android推送功能。62.3.3 使用第三方平台6第三章 云推送73.1 云推送是什么73.2 云推送的价值73.3 百度云推送特点和优势73.4 架构设计和技术点8第四章 客户端篇之Demo测试94.1 开发前准备的工作94.2 下载示例94.3 推送功能测试12第五章 客户端篇之分析145.1 百度云推送流程145.2 百度云推送demo框架14第六章 客户端篇之开发基础166.1 概述166.2 JSON166.2.1 JSON 语法166.2.2 基础结构176.2.3 基础示例186.2.4 具体形式206.2.5 校验工具216.3 JSON解析216.3.1 Json解析实例216.3.2 推送告警json协议216.3.3 设备变更json22第七章 客户端篇之推送开发247.1 百度云推送demo裁剪247.1.1 Activity裁剪247.1.2 非必须方法裁剪247.2 精简代码详解257.2.1 AndroidManifest257.2.2 PushDemoActivity287.2.3 DemoApplication287.2.4 MyPushMessageReceiver297.2.5 核心库文件307.3 精简代码植入APP317.3.1 AndroidManifest317.3.2 PushDemoActivity347.3.3 DemoApplication347.3.4 MyPushMessageReceiver347.3.5 核心库文件35第八章 百度云推送客户端应用篇368.1 推送报警应用368.1.1 应用场景描述368.1.2 推送类型选择378.1.3 不同账号实现388.1.4 Json协议制定及解析388.1.5 消息中通知实现398.2 设备状态更新应用418.2.1 应用场景描述418.2.2 推送类型选择418.2.3 推送实现418.3 总结42第九章 服务端篇之应用开发43第十章 总结44第十一章 附表145第一章 简介我来说几句吧,本来我只是想记录下的可结果写到了现在。在百度官网部分东西说得不是特别详细,我这篇文章就当是百度云推送的一个参考设计吧。因为我也确实这么走了过来,确实可以实现功能。尤其有些用户需要开发针对单台手机单个账号的情况,如何使用userID channelId来区别不同是手机,最后实现不同的推送。我这里都有个介绍实现和详解。服务器端的代码有贴上,但是我这个只是针对android有时间的话我写点关于IOS方面的。下面有服务器demo和android推送接收的截图。左边是服务器的想百度云推送发的,右边是我们项目中接收到的。图1.服务器客户端第二章 云推送2.1 云推送是什么 云推送(Push)是百度云平台向开发者提供的消息推送服务;通过云端与客户端之间建立稳定、可靠的长连接来为开发者提供向用户端实时推送消息的服务。百度云推送服务支持推送三种类型的消息:通知、透传消息及富媒体;支持向所有用户或根据标签分类向特定用户群体推送消息;支持更多自定义功能(如自定义内容、后续行为、样式模板等);提供用户信息及通知消息统计信息,方便开发者进行后续开发及运营。2.2 云推送的价值 1. 随时随地了解最新资讯。2. 低资费3. 实时性两者不同方式实时性比较方式特点Push单Socket长连接 BP激活AP,AP可休眠服务器端触发,实时性高,手机可休眠、省电省流量Pull Http轮询方式 AP不可休眠 客户端查询触发,延时大,手机耗电量大,流量大2.3 百度云推送特点和优势1、最省:省电、省流量、零成本百度云推送采用单一终端中的多个应用共享一个百度云推送服务进程和一条TCP长连接,最大化的降低客户端的资源消耗,省电省流量。此外百度云推送的消息推送服务完全免费,开发者使用零成本。2、最稳定:消息到达率超98%3、最便捷:强大的推送控制台百度云推送为开发者准备了强大的管理后台,开发者可以在后台可以轻松便捷的操作消息推送以及查看用户的信息统计。2.4 架构设计和技术点第三章 客户端篇之Demo测试3.1 开发前准备的工作在做基于SDK的开发中一般都会有开发者账号注册,所以必须去注册一个百度开发者账号。这个我这里就不多说了,推荐个网址应该可以完成注册。网址:/475566936/2 。除了注册开发者账号外,还必须安装android的开发环境,具备这一个条件就可以做下面的工作了。本节中主要讲解如何从百度开发者中心下载并使用百度提供在Demo。多余的话就不说了直接进入主题。3.2 下载示例具备了开发者账号后就进入百度开放云平台,下面的这个网址是开发指南:/wiki/index.php?title=docs/cplat/push/guide&qq-pf-to=pcqq.c2c 。原则上说是可以根据这个指南就可以成功运行百度提供的示例程序,但是个人感觉说得不够详细,我就自己的经历写下如下步骤。当进入如上的网站后,点击右上角的登录,成功后就后在右上角显示管理控制台。点击管理控制台进入轻应用管理,再点击如图的箭头就可以显示如图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 推送设置在这里第一次使用的时候可能不知道应用包名是什么,那就先来介绍百度云推送的SDK。从该网址下载android版本的客户端SDK包及应用Demo:/wiki/index.php?title=docs/cplat/push/sdk/clientsdk 。 下面并解压包目录如下Baidu-Push-SDK-Android-L2-3.2.0Demo ,将Demo导入到eclipse中。如果出现编译报就将编码改成UTF-8的,一般就不会报错了。这样把示例程序运行到手机中,会发现程序接收不到百度云在推送。是因为还要修改mainfest.xml中在api_key的值就是刚才推送测试2中基本信息API key见图1.5中的红圈。我的修改如下:再次运行就可以接收百度云推送的消息了。下一节介绍详细测试过程。3.3 推送功能测试手机上运行pushdemo软件,进入百度云开发者服务管理,在工程名称中选择刚才的推送测试2。点击左边的云推送如图1.7;图1.7 云推送点击通知,进入如下图1.8,在标题和消息内容中填写相关内容,最后也是最关键的时候到了,最好将pushdemo运行到后台或者说退出,这样你才能更加形象的感受到推送功能,好了点击图中的发送,大概1秒的时间,你就会听到声音,说明你收到了推送,如图1.9测试结果,这个消息和图1.8中的内容不对应,因为结果是我第二天。关于消息和媒体的测试我这就不说了,我测试过要可以的。图1.8 新建通知图1.9 测试结果第四章 客户端篇之分析4.1 百度云推送流程百度云推送采用单一终端中的多个应用共享一个百度云推送服务进程和一条TCP长连接,最大化的降低客户端的资源消耗,省电省流量。主要通过这个TCP长连接使得百度云服务器和设备之间建立单一通道,服务器直接向设备推送消息。推送流程主要是:公司的服务器向百度云推送服务器发出推送,然后百度云推送直接向对应设备ID发送推送消息,设备接收到消息后直接处理。开发者可以根据自己的情况使用通知还是消息来推送,通知直接由系统来处理,每条都会通知,而消息可以由自己来处理。百度云推送集成到开发者自己的系统中,会有自己的应用,比如说,我只想往特定的用户发送消息。在百度的网页说有说使用user ID和channel ID,但是很多在纠结怎么获取到,其实在onBind方法中可以获取百度云推送过来的两个ID号,然后直接发送自己的服务器,这样就可以控制往特定的设备发送告警信息了。4.2 百度云推送demo框架从百度云下载过来的android Demo包,主要包括6个JAVA文件类,其实大部分是可以去掉的,只有2个是必须要用的后面我会弄一个最精简的demo给大家用。MyPushMessageReceiver.java这个类是最核心的,用来接收百度云推送的消息。DemoApplication 这个类可以用来启动和停止推送。而MyPushMessageReceiver 用来接收消息和通知。这个是3个界面,删除关系也不是很大,对于推送来说没有影响。还有有就是通用的一些函数,类似个工具类,这个类也是可以去除的。下面就是libs和mainfest.xml这个里面是配置推送的,很多时候会设置出错,在后面的推送应用中我会介绍哪些是有用的。第五章 客户端篇之开发基础5.1 概述云推送(Push)是百度开放云向开发者提供的消息推送服务;通过利用云端与客户端之间建立稳定、可靠的长连接来为开发者提供向客户端应用推送实时消息服务。百度云推送服务支持推送三种类型的消息:通知、透传消息及富媒体;支持向所有用户或根据标签分类向特定用户群体推送消息;支持更多自定义功能(如自定义内容、后续行为、样式模板等);提供用户信息及通知消息统计信息,方便开发者进行后续开发及运营。目前单条消息支持最大 4K 的消息推送功能,兼容文本和二进制消息格式。如果应用有超过 4K 数据推送的需求,则应用可以在推送的消息里携带资源的 URL 地址,客户端在接收到消息后,主动对这个超过 4K 的数据发起另外一次请求。5.2 JSONJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C+, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。5.2.1 JSON 语法JSON 语法是 JavaScript 语法的子集。 JSON 语法规则JSON 语法是 JavaScript 对象表示语法的子集。 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对JSON 数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:1 firstName:John这很容易理解,等价于这条 JavaScript 语句:1 firstName=John JSON 值JSON 值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false)数组(在方括号中)对象(在花括号中)Null5.2.2 基础结构JSON有两种结构json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。1、对象:对象在js中表示为“”括起来的内容,数据结构为 key:value,key:value,.的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。2、数组:数组在js中是中括号“”括起来的内容,数据结构为 java,javascript,vb,.,取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。经过对象、数组2种结构就可以组合成复杂的数据结构了。5.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: science fiction , firstName: Tad, lastName: Williams, genre: fantasy , firstName: Frank, lastName: Peretti, genre: christian fiction ,musicians: firstName: Eric, lastName: Clapton, instrument: guitar , firstName: Sergei, lastName: Rachmaninoff, instrument: piano 这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称 / 值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。5.2.4 具体形式1、对象是一个无序的“名称/值对”集合。(1)一个对象以“”(左括号)开始,“”(右括号)结束。(2)每个“名称”后跟一个“:”(冒号);(3)“名称/值 对”之间使用“,”(逗号)分隔。例子:表示人的一个对象:姓名 : 大憨,年龄 : 242、数组是值(value)的有序集合。(1)一个数组以“”(左中括号)开始,“”(右中括号)结束。(2)值之间使用“,”(逗号)分隔。例子:一组学生 学生 : 姓名 : 小明 , 年龄 : 23, 姓名 : 大憨 , 年龄 : 24 说明:此Json对象包括了一个学生数组,而学生数组中的值又是两个Json对象3、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 字符串(string)与C或者Java的字符串非常相似。5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。5.2.5 校验工具JSON格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中。但是国人的一款在线工具 BeJson 给众多程序员带来了一阵凉风。5.3 JSON解析5.3.1 Json解析实例我在用百度云推送的时候只用到一个2条类型的json格式数据,我用这个作为我们的协议,然后来解析这个数据获取我们需要的字段数据。具体协议定义我们暂时只用了2个一般都是足够了,我是使用消息的方式去发送的,自己控制是否有通知,这样的操作比较方便。json协议定义下面讨论。5.3.2 推送告警json协议推送告警接收到的消息:info:DevId:AX-DSW-2012081000065,DevSn:012345678,Channel:0,Time:2014-03-27 10:14:57,WType:537406354,FType:16,AreaName:遥控器,Locate:沃尔玛广场DevId:设备ID号DevSn:设备SNChannel:通道号Time:告警时间WType:告警方式,参考附件表AFType:文件类型,参考附件表BAreaName:防区名称,协议解析:使用如下所示的代码可以实现该条json协议,我是为以后考虑才做成一个对象数组的形式:try JSONArray jxxJsonObject = new JSONObject(json).getJSONArray(msg);for (int i = 0; i jxxJsonObject.length(); i+) JSONObject jo = (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%TimemsgString = msgTypeString+%+devID+%+snString+%+chnnelString+%+timeString;/sendDevStateUpdate(msgString);AlarmHandler amAlarmHandler = AlarmHandler.getInstance();amAlarmHandler.devStateChangeNotify(devID, snString,msgTypeString);return retString; catch (JSONException e) e.printStackTrace();5.3.3 设备变更json状态变更消息message=msg:DevId:AX-DSW-2012081000065,DevSn:012345678,Channel:0,Time:2014-03-27 09:53:03,MsgType:33024该条协议的解析如下:try JSONArray jxxJsonObject = new JSONObject(json).getJSONArray(info);for (int i = 0; i jxxJsonObject.length(); i+) JSONObject jo = (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);return retString; catch (JSONException e) e.printStackTrace();第六章 客户端篇之推送开发这一章节中我会写下我在使用百度云推送中遇到问题及效率情况,我已经在两个项目中集成了百度云推送功能了。6.1 百度云推送demo裁剪在上面一节中我就有提到过把从百度云官网下载的android推送demo 精简下。这里刚好和大家一起来做做,我这个下面的截图就是精简好的,有需要这个DEMO的可以从百度网盘去下载,我会提供地址。这里来说说如何来精简。6.1 百度云推送精简demo6.1.1 Activity裁剪百度云推送带的这些activity都是为了demo演示而设计的,实际在我们的项目中是用不到的,我们可以将其删除并且在mainfest.xml中将其删除掉。可以照常运行起来,不会有什么问题。主要删除的类:LoginActivity.java 、CustomActivity.java。如何删除我就不多了,我在下一节中会贴出我用的3个文件的所有源码,在你下载的精简的demo里面也有源码,对照下就可以了。6.1.2 非必须方法裁剪Utils.java 这个类主要是用来保存参数的作用,里面的代码大多都是SharedPreferences的操作其实我们这里也用不到直接删除。删除以上的完了。就只剩下我们需要的三个文件了。下面我们来详细解释这些文件,已经如何使用。6.2 精简代码详解经过上面的精简剩下的代码只剩下DemoApplication、MyPushMessageReceiver 、 PushDemoActivity这三个文件了,当然还有个很重要的AndroidManifest.xml。这些文件中其实PushDemoActivity在实际项目中也是不需要的,只是需要将其中的几行代码写入到你系统中的activity就可以,所以也不算特别重要。下面我们就来一个个文件的讲解这些代码的作用。下面从最重要的AndroidManifest.xml开始讲起。6.2.1 AndroidManifest这个是运行百度云推送必要的内容,主要有注册推送服务、广播接收器、需要的权限、application、还有个需要用的api_key信息,api_key也可以写入到程序中去,必须在程序启动的是绑定。下面是我现在的androidmainfest.xml文件,大家可以参考下,当然也是百度云demo带的,我只是修改了api_key。 下面来详细分析下大家关心的内容:1.权限 这一部分Push service 运行需要的权限,大部分软件都会用得到,其实没有多少可以说的,有什么不明白自己可以去百度查查就知道意思了。这个就直接复制到自己的项目中,就算和你之前的有相同的也没有关系,所以就不多少了。2.DemoApplication 这里除了说明哪个是软件运行调用哪个界面外,还有个很重要的是application 指定的DemoApplication,必须指定该项,否则后面很多运行的就会报错。3.服务和接收器除了上面说的其他的部分就是开机启动的服务和广播接收器,这个不能随便改动。6.2.2 PushDemoActivity这个类经过精简后其实只剩下一个方法那就是onCreate其他的内容都不要,如下所示:public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);Resources resource = this.getResources();String pkgName = this.getPackageName();setContentView(resource.getIdentifier(main, layout, pkgName);Log.d(YYY, before start work at + Calendar.getInstance().getTimeInMillis();PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY, cwWFTovG6mUSSvmF8ksww0M0);Log.d(YYY, after start work at + Calendar.getInstance().getTimeInMillis();/ Push: 如果想基于地理位置推送,可以打开支持地理位置的推送的开关PushManager.enableLbs(getApplicationContext();这方法其实就是推送服务开启的部分,这个类的作用就开启百度云推送,其中关键的方法就是startWork,启动了百度云推送后就没有意义了。所以这个类在自己的系统中实际是可以不要的。6.2.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年机器人技术应用与管理试卷及答案
- 2025年全国基层产科医师培训项目专业理论考核历年参考题库含答案
- 2025年注册验船师资格考试(A级船舶检验专业实务)经典试题及答案一
- 2025年注册验船师资格考试(A级船舶检验专业案例分析)全真冲刺试题及答案二
- 北京市门头沟区2024-2025学年八年级上学期期末考试道德与法制试题及答案
- 北京市门头沟区2023-2024学年七年级下学期第一次月考道德与法制考试题目及答案
- 2025年陵园服务礼仪与沟通技巧面试题
- 2025年生态修复师中级考试模拟题答案
- 2025年环境工程师专业能力评估模拟题及解析
- 2025年银行信贷审批员招录笔试题目及专业解答公开
- 北京市《配电室安全管理规范》(DB11T 527-2021)地方标准
- 【开学第一课】七年级新生主题班会:踏上青春路 启航正当时 课件
- 超限梁板模板工程专项施工方案
- 2024年广东省佛山市投资促进中心招聘历年【重点基础提升】模拟试题(共500题)附带答案详解
- 快递驿站转让协议范本合同范本
- 绿盟科技2023年4月合作伙伴NSSP-Service认证附有答案
- QC/T 388-2023 碗形塞片 (正式版)
- 军事理论-综合版2078612-知到答案、智慧树答案
- 《小古文100篇》上册
- 2024年(基桩低应变反射波法)检测及试验技能与理论知识考试题库与答案
- 出租车过户委托书
评论
0/150
提交评论