使用GCM服务(Google Cloud Messaging)实现Android消息推送

  • Post author:
  • Post category:其他


最近在网上查了关于很多

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的客户端了。

3.下面我们可以开始着手写Android的客户端程序了,在文章的最后我会提供源码的下载地址。
a)根据官网,我们可以知道首先要给程序添加依稀权限。添加权限大家可以参考:

http://developer.android.com/google/gcm/gs.html

<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

出现的界面如下图所示。

4.这里楼主提供Android客户端程序的下载地址,服务器还需自己配置,下载地址:

GCM-Demo


注:此博文也是楼主根据官网总结出来的,难免有错,大家勿喷,如果大家有更好的方法,欢迎拿出来分享。

PS:希望大家下载了源码后能耐下心来看看,要知其然还要知其所以然。

最后,希望大家尊重劳动者的成果,在转载的时候加上本文链接:http://blog.csdn.net/jasonzhou613/article/details/8864302



版权声明:本文为Jasonzhou613原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。