当前位置: 网学 > 编程文档 > Android > 正文

android推送指南

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员为广大网友收集整理了,android推送指南,希望对大家有所帮助!


    博雅互动内部资料,请勿外传序号123创建文档变更内容说明版本号1.0版本日期2011.10.24执笔人李小龙
    (一)学习指南前言
    当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据。要获取服务器上不定时更新的信息一般来说有两种方法,第一种是客户端使用Pull(拉)的方式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现。第二种就是服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Pushisbetterthanpull。因为Pull方式更费客户端的网络流量,更主要的是费电量。在我们的游戏中同时也可以使用Push这种方式来推送数据,当用户在一段时间里没有运行我们的游戏,当然这个需要后台进行统计。我们给这些用户强制发送一些消息(比如:送一些游戏币来吸引用户),从而达到更好的推广我们的游戏。Android从2.2版本开始增加了CloudtoDeviceMessaging(C2DM)框架,在系统中支持了Push功能,基于Android平台使用Push功能更加简单了。虽然C2DM目前还处在实验室阶段,不过小规模的使用应该没问题下面我们就来体验一下Android的C2DM功能。
    C2DM框架
    使用Android的C2DM功能有几个要求:1.2.需要Android2.2及以上的系统版本。使用C2DM功能的Android设备上需要设置好Google的账户。
     博雅互动内部资料,请勿外传3.需要在这里注册使用C2DM功能的用户邮箱账号(最好为C2DM单独注册一个Gmail
    邮箱账号)。
    我们接下来C2DM的一个完整过程,这里借用一下Google官方推出的ChromeToPhone过程图来说明下。
    图1C2DM操作过程图
    C2DM操作过程图要使用C2DM来进行Push操作,基本上要使用以下6个步骤:(1)注册:Android设备把使用C2DM功能的用户账户(比如android.c2dm.demo@gmail)和App名称发送给C2DM服务器。(2)C2DM服务器会返回一个registration_id值给Android设备,设备需要保存这个registration_id值。
     博雅互动内部资料,请勿外传(3)Android设备把获得的registration_id和C2DM功能的用户账户(android.c2dm.demo@gmail)发送给自己的服务器,不过一般用户账户信息因为和服务器确定好的,所以不必发送。这样Android设备就完成了C2DM功能的注册过程,接下来就可以接收C2DM服务器Push过来的消息了。(4)服务器获得数据。这里图中的例子ChromeToPhone,服务器接收到Chrome浏览器发送的数据。数据也可以是服务器本地产生的。这里的服务器是GoogleAppEngine(很好的一项服务
    ,可惜在国内被屏了),要换成自己的服务器。服务器还要获取注册使用C2DM功能的用户账户(android.c2dm.demo@gmail)的ClientLogin权限Auth。(5)服务器把要发送的数据和registration_id一起,并且头部带上获取的Auth,使用POST的方式发送给C2DM服务器。(6)C2DM服务器会以Push的方式把数据发送给对应的Android设备,Android设备只要在程序中按之前和服务器商量好的格式从对应的key中获取数据即可。
    实列开发
    我们要创建的程序名称为AndroidC2DMDemo,包名为com.ichliebephone.c2dm。开始之前我们先去C2DM网页上注册一下使用C2DM功能的用户账户。
    应用程序名其中应用程序名要填写带包名的完整名称,比如这里为om.ichliebephone.c2dm.AndroidC2DMDemo。
     博雅互动内部资料,请勿外传
    C2DM用户账户注册
    详细代码在此省略。
    因为C2DM功能只有2.2及以上的Android系统才支持,因此创建一个2.2及以上的AVD,然后在”设置->账户与同步”里还要设置好GoogleAccount,如下图所示:
     博雅互动内部资料,请勿外传
    然后就可以运行我们写的程序了,我们会在DDMS输出中看到获得的registration_id:
    有了registration_id,我们的服务器端就可以向C2DM端发送需要Push的数据了,这里进行简单化处理下,在url工具下直接使用curl命令来模拟服务器功能向C2DM发送数据。我们先来获取C2DM的ClientLogin权限Auth,在命令行下输入(这个在实际开发过程中需要后台php实现发送命令的功能):
     博雅互动内部资料,请勿外传
    lingaohe@lingaohe-laptop:~$curl-d"accountType=HOSTED_OR_GOOGLE&;Email=android.c2dm.demo@gmail&;Passwd=androidc2dmdemo&;service=ac2dm&;source=bupt-c2dmdemo-1.0"https://google/accounts/ClientLogin
    这个表示以POST的方式向https://google/accounts/ClientLogin发送数据,其中把Email和Passwd换成你自己在C2DM网页上注册的邮箱号和密码。如果你的邮箱已在C2DM网页上注册,并且密码没有错误的话就会返回需要的Auth内容:
    1.SID=DQAAAKYAAADcTtHbBBNcZJEOfkfVRycD_ZOIidwsQ3UwIY7cSrYWaY6uhlfo0l9gRPB-mQxP4K2T5tWiG--vWVmSTeq5p8SPwgnsYvfzj7bkNiPPIy4xRimVVfBmAHnZgLohw7gHMKi5DS6kK-Ut5tNzdTkI0I2tUDF0ryQ7MnPpI6Sj-gUCyBXmvKatHHDnNTTV78XdGIx7FYej1DyqGsPsYo3bCstHgltjv3cd2Hs7D4yrpUWHZw2.LSID=DQAAAKgAAABCpaoUE4XvxM24Cofntw1IUGx5fKxX-m7aqTL0zhunP0OjzJ2sn9ywmPa1BMZ2cF2IchuxHFLVzaSQfydAmiHZJGXLgaUorpIN6yz1e0VFWKmS6j4wGjZOos3QoJ9rkha0jKbOiHfBesADjxk-qjJ24TJ0RL-xkZHQyzS69YlA1KyzqIKjAMCzgqaDfCwhqxylJzizJksO2h8xpAFXZ38d_grm8XYZtzejiCiAMAR65A3.Auth=DQAAAKoAAACRF4pgYULnXULoWgbwfdqmMiRhfZYa1l-LW_rwGD7cofov4L4c2bVrtCOXbEbkju_hhqdAonpMkrb5icptt28fU8c-s-u1y2MXNYDxPIdQzfA2t6oI3NTmyj35MpsR1NKL4TN7ZVEn6z9NueuiKAqLHukZYh1YMGkGC8M6rVvA7AWPW36064XCQED7KLVNp_pGT00lrni7UdZKZWEy0FT-EVR-OxDy
    HWw6C-5Kmfkisw
    返回的内容包括SID,LSID和Auth三个部分,其中Auth是我们需要的内容。有了Auth和registration_id值后,我们就可以继续用curl命令模拟我们自己服务器的功能向C2DM发送要推送的数据:
    lingaohe@lingaohe-laptop:~$curl-H"Authorization:GoogleLoginauth=DQAAAKoAAACRF4pgYULnXULoWgbwfdqmMiRhfZYa1l-LW_rwGD7cofov4L4c2bVrtCOXbEbkju_hhqdAonpMkrb5icptt28fU8c-s-u1y2MXNYDxPIdQzfA2t6oI3NTmyj35MpsR1NKL4TN7ZVEn6z9NueuiKAqLHukZYh1YMGkGC8M6rVvA7AWPW36064XCQED7KLVNp_pGT00lrni7UdZKZWEy0FT-EVR-OxDyHWw6C-5Kmfkisw"-d"registration_id=APA91bGUBoSvt3G5Ny9t0IGLmIKAKYX6G6VHwSQHh3tP2fqcaQ0N4GPdKh5B3RDUHFCFF06YwT8ifOP_cOy5BAWyCLHL8d8NpuIW9AqXt9h2JSBVF2MitZA&;collapse_key=1&;data.msg=ichliebejiajia"https://android.apis.google/c2dm/send
    其中发送的数据部分为data.msg=ichliebejiajia,表示发送的数据内容为ichliebejiajia,键值为msg,键值得和Android终端上的程序统一好,以便终端上可以获取。如果发送成功,会返回一个id值,比如:
    1.id=0:1308623423080544%6c5c15c200000031
     博雅互动内部资料,请勿外传
    2.lingaohe@lingaohe-laptop:~$
    这时我们的服务器就已经把数据发送给C2DM服务器了,Android设备上一会就能接收到C2DM服务器Push的数据。在我们的例子中我们可以看到DDMS中打印出的消息:
    同时Android模拟器的状态栏上会有对应的通知显示:
    C2DM的局限性
    1.需要Android2.2及以上的系统版本。2.使用C2DM功能的Android设备上需要设置好Google的账户。
     博雅互动内部资料,请勿外传
    开发过程中遇到的一些问题
    1.同一个gmail账号绑定到同一台机器上每次运行我们的程序获得的registrationId(这个id就是我们个用户发送消息的唯一标识)是不同的.我们讨论的解决方法是:获取用户最后一次运行我们程序时候注册的registrationId,当然这个id最好是要和用户游戏的用户名绑定到一起(就是说一个用户名对应多个registrationId,而我们只获取最后一个)2.在实现该功能的过程中,我个人认为需要以公司的名义注册一个Gmail账号,这个Gmail账号是用来我们向google服务器发送消息获取一个权限。因为在向用户推送信息的时候除了需要一个registrationId,同时还需要google赋予我们的一个权限值,这个权限值我们只需要获取一次就可以了。
    
    
  • 下一篇资讯: Android控件样式自定义
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号