关于消息推送GCM的技术可行性分析.docx_第1页
关于消息推送GCM的技术可行性分析.docx_第2页
关于消息推送GCM的技术可行性分析.docx_第3页
关于消息推送GCM的技术可行性分析.docx_第4页
关于消息推送GCM的技术可行性分析.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GCM消息推送可行性分析什么是GCMAndroid从2.2版本开始添加了Cloud to Device Messaging(C2DM)框架,在系统中支持了Push的功能,这对于需要用到Pash功能的开发者来说是一个好消息。GoogleCloudMessaging推送消息流程(GCM)是一个能够帮助开发者从服务器端发送数据到运行在Android手机上的程序的服务。这个服务提供了一个简单,轻量级的机制使得服务器端可以告诉移动端的程序与服务器端建立直接的联系,来获取更新的程序或者用户的数据。C2DM服务可以处理所有的消息队列的问题并且可以把消息发送到目标机器上运行的目标程序。优点:Google提供的服务、原生、简单,无需实现和部署服务端。缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。官方APIHere are the requirements for running a GCM Android client:At a bare minimum, GCM requires devices running Android 2.2 or higher that also have the Google Play Store application installed, or an emulator running Android 2.2 with Google APIs. Note that you are not limited to deploying your Android applications through Google Play Store.However, if you want to continue to use new GCM features that are distributed through Google Play Services, the device must be running Android 2.3 or higher, or you can use an emulator running Android 2.3 with Google APIs.On Android devices, GCM uses an existing connection for Google services. For pre-3.0 devices, this requires users to set up their Google accounts on their mobile devices. A Google account is not a requirement on devices running Android 4.0.4 or higher.以下是Android客户端能运行GCM的条件:1. 最低配置,Android系统2.2及以上并且同时安装有Google Play应用商店,或者是使用了GoogleAPIs,系统在2.2及以上的Android模拟器。请注意你不会被限制需要适用Google Play应用商店来下载App;2. 然而,如果你想继续通过Google Play Services使用后续的GCM的新特性,设备系统必须等于或高于Android2.3(偷懒,模拟器相关支持就不翻译了);3. 在Android设备上,GCM使用Google Services上存在的一个连接。对于3.0之前的设备,需要用户在移动设备上设置好谷歌账号。在Android4.0.4及以上版本则不需要谷歌账号。GCM的主要特点1、它允许第三方的程序服务端发送消息到他们的安卓设备。2、GCM不能保证消息的发送和消息的顺序。3、手机端的程序不需要一直运行来接收消息。系统会通过Intent broadcast来唤醒程序当有新的消息到来时。当然程序需要设置适当的broadcast receiver和permission。4、它不提供任何的用户界面或者其他的东西来处理消息。C2DM只是简单的把收到的原始消息传递给程序。这个程序提供了处理这个消息的方法。比如,这个程序可能抛出一个通知,显示一个自定义的界面或者只是同步数据5、GCM要求手机必须运行Android2.2或者更高版本并且要有Google Play Store ,或者运行具有谷歌api 的Android 2.2虚拟机。但是,你不仅限于通过Google Play Store部署你的程序。6、它使用一个现有的连接用于谷歌服务。对前置3.0设备,这要求用户在他们的移动设备设置他们的谷歌账户。Android 4.0.4或更高对于谷歌帐户是不要求的。GCM如何工作?简单说就是我们从自己的服务器上发送消息到google的服务器上,在通过google的服务器推送出去。它们分成下面两类: 1. Components:GCM里面包含的组件 2. Credentials:用在不同阶段来确认各方都已经被认证的IDs和tokens。这样消息才能 发到正确的地方。生命周期流程 下面是C2DM的主要过程: 1. Enabling C2DM:运行在手机上注册了来接收消息的Android程序。 2. Sending a message:发送消息到手机的第三方程序服务器。3. Receiving a message:从C2DM服务器接收消息的Android程序。 实现GCM推送EnablingGCM下面是运行在手机上的Android程序注册接收消息的步骤:1.程序第一次要使用消息服务时,触发一个registrationintent到GCM服务器。这个registrationintent(ent.REGISTER)包括senderID以及安卓applicationID。2.如果注册成功,GCM服务器broadcasts一个ent.REGISTRATIONintent,它给予安卓程序registrationID。程序应该保存这个ID留待后用。google可能定期的刷新registrationID,所以你的ent.REGISTRATIONIntent必须可以多次调用。程序应该能够做出相应的反应。3.为了完成注册,程序要把registrationID发送给第三方服务器端。第三方程序服务器通常把这个ID存在数据库中。SendingaMessage如果第三方程序服务器要发送消息,下面的事情必须就位:1对某个特定的设备,这个程序有一个允许它接收消息的registrationID。2第三方程序服务器存储了这个registrationID。3一个API键。这个是开发者必须在第三方程序服务器上为程序设置的东西(更多信息,看这里RoleoftheThird-PartyApplicationServer)现在它被用来发送消息到手机。下面是第三方程序服务器发送消息的步骤1第三方程序服务器发送消息到GCM服务器。2如果用户的手机当前不在线,google会把这个消息入队并存储这个消息。3当用户手机在线时,google发送消息到手机。4在手机端,系统使用适当的permission通过Intentbroadcast把这个消息broadcast到特定的程序,然后特定的程序获得这个消息。这样就唤醒了这个程序。应用程序不需要提前运行来接收这个消息。5程序处理这个消息。如果应用程序是做一个复杂的处理,你可能想获取屏幕唤醒锁并且在Service里做任何处理。ReceivingaMessage手机上的程序收到消息时的步骤:1系统收到消息,然后从消息中提取键值对。2系统使用ent.RECEIVEIntent把键值对传给目标程序。3目标程序从RECEIVEIntent中根据key取得数据并处理数据。WritingAndroidApplicationthatuseGCM想要写一个使用GCM的程序,你必须有一个程序服务器端能够执行RoleoftheThird-PartyApplicationServer所描述的任务。请记住GCM是没有用户界面的。怎么在程序里处理消息取决于你。写个程序客户端有两个主要步骤:1.创建一个manifest文件。这个文件包含程序使用GCM需要使用的权限。2.写java代码。要使用GCM,程序要包括:A开始和停止注册服务的代码。BRent.C2D_MESSAGE和ent.REGISTRATION。CreatingtheManifest每一个程序在根目录下都有一个AndroidManifest.xml文件。这个文件提供程序的必要信息给Android系统,这些信息是系统在运行任何程序代码之前必须要有的。要使用GCM,这个文件必须包含:1 com.google.android.c2dm.permission.RECEIVE。程序拥有注册和接受消息的权限。2 android.permission.INTERNET。程序拥有联网的权限。3android.permission.GET_ACCOUNTSpermission当GCM需要谷歌账户(但设备版本低于4.0.4时需要)3 Theandroid.permission.WAKE_LOCKpermission程序可以保证处理器在睡觉的时候得到消息。客户端代码a) 根据官网,我们可以知道首先要给程序添加依稀权限。添加权限大家可以参考:/google/gcm/gs.html b) 完成类GCMIntentService的编写,该类必须继承GCMBaseIntentService,在这里我们需要完成的方法有: -onRegistered(Context context, String regId) -onUnregistered(Context context, String regId) -onMessage(Context context, Intent intent) -onError(Context context, String errorId) -onRecoverableError(Context context, String errorId) 在onCreate方法里我们需要添加以下语句:GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this); final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals() GCMRegistrar.register(this, SENDER_ID); else Log.v(TAG, Already registered); C)其实在我们安装完Google Cloud Messaging for Android Library后里面就有一个目录trasgooglegcmsamplesgcm-demo-client,这里就有Android客户端的源码,只是我们需要做些修改,我们需要修改目录samples/gcm-demo-client/src/com/google/android/gcm/demo/app下的CommonUtilities.java 里的SENDER_ID 和SERVER_URL。修改如下:static final String SERVER_URL = 0:8080/gcm-demo; static final String SENDER_ID = 4815162342; GCM在国内可用性不高原因1、 Android很多被手机厂商定制化,厂商可能会去掉GCM服务。2、 需要有安装有Google Play应用商店,或者是使用了GoogleAPIs,而国内定制系统,会删除此服务或改成自己的Store,例如小米、酷派等。2、 Android 2.2到3.0之间需要安装Google Store并设置Google帐号。3、 由于国内2G和移动3G的NAT超时时间都小于GCM心跳时间(28分钟),TCP长连接必然无法保活,每次都要等28分钟心跳失败重连后才能收到Push。4、 某些运营商可能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论