使用GCM服务(Google Cloud Messaging)实现Android消息推送
最近在网上查了关于很多Android消息推送的资料,其中主要有四种方法。
1) 使用GCM服务(Google Cloud Messaging) 2) 使用XMPP协议(Openfire + Spark + Smack) 3) 使用MQTT协议 4) 使用HTTP轮循方式
以上这四种方法的优缺点大家都可以到网上搜到,这里提供一个参考的连接:http://blog.csdn.net/shagoo/article/details/7899466 在这里我将使用GCM服务(Google Cloud Messaging)来实现Android消息的推送。 注:本人已实现该推送功能,不过有些限制条件。
Google Cloud Messaging推送消息流程:这里我就稍微提下,我们从自己的服务器上发送消息到google的服务器上,在通过google的服务器推送出去,具体的实现细节我也不深究了,也许有人就会问为什么要通过google的服务器推送呢,直接从自己的服务器上推送过去就好了;在此之前我也考虑过,可是中间有太多的实现细节,说实话楼主也不是很懂,所以也就妥协了.....
实现该推送功能的必备条件: 1)你的SDK需要从SDK Manager里安装Google Cloud Messaging for Android Library,安装步骤:启动SDK Manager->Extras->勾选Google Cloud Messaging for Android Library这一项,然后安装就可以了。 2)你用来调试的模拟器或是真机必须支持Google APIs,比如说你用模拟器调试的话,在新建模拟器的时候“target”这一项要选择Google APIs,版本要高于2.2。 3)gcm.jar文件,等你执行完第一步的时候,你就可以在你的Android SDK目录下的extras\google\gcm\samples\gcm-demo-client\libs目录里找到这个文件,把它复制到你的项目的libs目录下,并添加路径。 4)你的模拟器或是真机必须设置并且登入一个google账户,比如你在调试的时候出现ACCOUNT_MISSING错误提示,说明就是没有登入google的帐号。 5)你的耐心。。。。。。 6)如果前面五点你都具备了,请往下看.......
下面我将一一介绍我实现的步骤: 1. 注册用户,得到Project Number和APP key,Project Number就是我们在后面编程时候所要用到的SENDER_ID 。开启Google Cloud Messaging for Chrome服务。
a) 注册完后点击左侧的Overview后,我们在右边就可以看到Project Number,如上图。
b) 同样,我们点击左边的API Access就可以看到API key,如上图红线的地方;如果你没有API Key,你可以点击红线部分的“Create new Server key...”来创建一个API key。
c) 其次我们要开启Google Cloud Messaging for Android服务,点击页面左边的“Services”,在右边的下面我们就可以找到Google Cloud Messaging for Android项,开启它。如下图。
2.现在我们就要建立自己的服务器了(PS:别听到服务器就害怕,这里只是建立一个小小的网站式服务器)。官网有两种方式简历服务器,我采用的是App Engine for Java这个方法,具体可以参考:http://developer.android.com/google/gcm/demo.html。 这里我讲讲我是怎用App Engine for Java建立发送消息的服务器的。APP Engine for Java的下载地址: App Engine for Java a)在你安装Google Cloud Messaging for Android Library后,你的Android SDK目录下有一个extras/google/目录,其中包含的目录有gcm-client, gcm-server, samples/gcm-demo-client, samples/gcm-demo-server和samples/gcm-demo-appengine. b)进入samples/gcm-demo-appengine/src/com/google/android/gcm/demo/server/这个目录,找到ApiKeyInitializer.java这个文件,用文本编辑器打开,找到replace_this_text_by_your_Simple_API_Access_key这句话,并用你的注册时得到的APP key替换它,保存。 c)打开dos窗口,开始->运行,在dos窗口下进入 samples/gcm-demo-appengine目录,在dos中输入ant -Dsdk.dir=D:\appengine-java-sdk runserver -Dserver.host=192.168.1.10 注:这里的-Dsdk.dir=D:\appengine-java-sdk要根据自己的实际情况来,-Dsdk.dir就是你存放appengine-java-sdk的目录,而-Dserver.host就是你自己电脑的IP。 d)以上步骤你都没出错的话,就可以打开浏览器输入:http://192.168.1.10:8080/home如果出现的界面和一下的图片一样说明你已经配置成功,可以开始写Android的客户端了。
- <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="xx"/>
- <permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />
- <uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />
- <!-- App receives GCM messages. -->
- <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
- <!-- GCM connects to Google Services. -->
- <uses-permission android:name="android.permission.INTERNET" />
- <!-- GCM requires a Google account. -->
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <!-- Keeps the processor from sleeping when a message is received. -->
- <uses-permission android:name="android.permission.WAKE_LOCK" />
- <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
- <intent-filter>
- <action android:name="com.google.android.c2dm.intent.RECEIVE" />
- <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
- <category android:name="my_app_package" />
- </intent-filter>
- </receiver>
- <service android:name=".GCMIntentService" />
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后里面就有一个目录tras\google\gcm\samples\gcm-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 = "http://192.168.1.10:8080/gcm-demo";
- static final String SENDER_ID = "4815162342";
注:这里的SERVER_URL和SENDER_ID要根据你自己的实际情况来,到这里我们的程序就基本写完了。下面就就可以运行进行调试了...... 当你启动模拟器或是真机并且以上步骤都没错的话,再次向浏览器中输入http://192.168.1.10:8080/home出现的界面如下图所示。
使用GCM服务(Google Cloud Messaging)实现Android消息推送的更多相关文章
- Android消息推送之GCM方式(一)
<声明> 转载请保留本来源地址: http://blog.csdn.net/wzg_1987/article/details/9140371 首先,你需要使用一个谷歌账号登录谷歌Api控制 ...
- 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表
1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...
- Android消息推送的服务端
2.Android消息推送 MQTT服务器采用mosquito http://mosquitto.org/ PHP管理包采用phpmqttclient:https://github.com/toku ...
- Android消息推送完美方案[转]
转自 Android消息推送完美方案 推送功能在手机应用开发中越来越重要,已经成为手机开发的必须.在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折.本文就是用来 ...
- Android消息推送完美方案
转自:http://bbs.hiapk.com/thread-4652657-1-1.html 推送功能在手机应用开发中越来越重要,已经成为手机开发的必须.在Android应用开发中,由于众所周知的原 ...
- Android消息推送完美解决方案全析
推送功能在手机应用开发中越来越重要,已经成为手机开发的必须.在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折.本文就是用来和大家共同探讨一种Android消息推 ...
- Android消息推送(二)--基于MQTT协议实现的推送功能
国内的Android设备,不能稳定的使用Google GCM(Google Cloud Messageing)消息推送服务. 1. 国内的Android设备,基本上从操作系统底层开始就去掉了Googl ...
- Android消息推送——JPush极光推送
刚看了一篇关于Android消息推送评测总结的博客http://www.cnblogs.com/logan/p/4514635.html: 自己也对原学过的JPush极光进行一下小结,方便后续工作使用 ...
- apollo实现c#与android消息推送(三)
3 实现c#消息推送服务 c#实现消息推送必须引入M2Mqtt.dll,源码 a 连接apache apollo代理服务器的代码.需要引入using uPLibrary.Networking.M2Mq ...
随机推荐
- SpringMVC07处理器方法的返回值
<body> <!--返回值是string的内部视图 --> <a href="user/add">add</a> <!--返 ...
- java06switch
public class SwitchTest { public static void main(String[] args) { /** * 如果第一名,参加麻省理工大学组织的1个月夏令营 * 如 ...
- ASP.NET-FineUI开发实践-9(三)
1. TextChanged事件前台触发回发后台,接上文,先给TextBox1加上事件,看看是怎么生成出来的, 注意AutoPostBack="true",找源代码,f4多出了个 ...
- phpmyadmin设置id自增(AUTO_INCREMENT)(转)
phpmyadmin设置id自增(AUTO_INCREMENT) 在A_I 前面打勾:如图 AUTO_INCREMENT =A_I 查看效果
- .net 实现 URL重写,伪静态
一,获得Mircosoft URLRewriter.dll: 获得Mircosoft URLRewriter.dll可以到http://www.microsoft.com/china/msdn/lib ...
- Android中滑动关闭Activity
继承SwipeBackActivity即可实现向右滑动删除Activity效果 点击下载所需文件
- java socket报文通信(三)java对象和xml格式文件的相互转换
前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ...
- XPath总结一
这里介绍下XPath的用法: 它生成一个string对象,作为XmlNode的方法SelectSingleNode,SelectNodes的输入参数 ,以此来查询符合条件的节点. 选择当前节点: . ...
- linux下定时任务
一.linux定时任务软件种类 .at : 适合执行一次的任务.突发性的任务.需要启动 atd 服务才能执行任务. .crontab: 周期性的执行任务工作:启动crond 服务后可以执行任务.最常用 ...
- AJAX快速上手
创建XMLHttpRequest对象 xmlHttp = new XMLHttpRequest(); xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); ...