Google GCM(推送)-Android+服务器

来源:互联网 发布:快递称重扫描软件 编辑:程序博客网 时间:2024/05/10 21:35

首先讲解这个 Google GCM服务之前 说明一下 这个是什么东西以及本人用它的原因。


Google GCM是 谷歌服务提供的推送机制.使用它您可以通过您创建的服务器发送指定信息与指定ID发送给谷歌GCM服务器让GCM服务器把信息传送给指定手机(指定ID).

这就有点像微信一样您发个指定还有,那么指定还有的手机上会显示您的信息.


1. 准备工作                  

如果我们想使用这项服务就需要在谷歌开发上做一系列操作.

     1:登陆 https://console.developers.google.com网站创建项目(该网站上的账号注册我就不做说明了.您如果有谷歌账号的话输入谷歌账号也可以). 

        Project->CreateProject->输入项目名 点击Create即可完成项目创建.如下图

2:添加 Google Cloud Messaging for Android 这个

点击进入您刚才创建的项目之后在 Apls&auth->APIs页面里 Google Cloud Messaging for Android 您可以找到这一栏开启它.

        

3.添加 API access

   在这里我们需要创建 Server API Key. 因为我们要在自的服务器中把这个 API Key发送给谷歌.

           


  



这样就能看见 Server Applications的 API KEY了。 这个API KEY要在 服务篇当中使用. 暂且准备好.


4. 获取 SENDER_ID

           这个是要在安卓中注册GCM时候用到的ID. 如下图 Project Number就是 SENDER_ID

          

好了,准备工作完成了.如果您的是中文版的话 对比以上图我想不难完成. ^_^ 

       现在进入到安卓篇

         

2. 安卓端                  

在编写代码前您需要添加 gcm.jar包.这我就不用说明了吧?下载方式百度一大堆 ^_^ gg 

安卓端主要实现两点. 

一个是您得注册ID并把该ID告诉您的服务器. 以便服务器想给您推送信息时按照此ID给您推送信息.

        另外一个您得接受服务器推送过来的信息.

1. 在实现以上连点之前首先需要AndroidManifest.xml里配置一些 权限等.

  <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.GET_ACCOUNTS" />
      <uses-permission android:name="android.permission.WAKE_LOCK" />
      <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

         <permission
            android:name="com.gcmtest.permission.C2D_MESSAGE" //这里需要注意 com.gcmtest是您的package路径
            android:protectionLevel="signature" />

         <uses-permission android:name="com.gcmtest.permission.C2D_MESSAGE" />//这里需要注意 com.gcmtest是您的package路径

 <application...>

        <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" />
                <!-- //这里需要注意 com.gcmtest是您的package路径 -->
                <category android:name="com.gcmtest" />
            </intent-filter>
          </receiver>

          <!-- 这是接受推送信息的 服务 -->
          <service android:name=".GCMIntentService" />
       </application>

    2. 下一步是注册ID

String regId; //这是您的注册ID结果.用这个ID传送给服务器,这样服务器就把推送信息发给您了.
public static final String SENDER_ID="368347852554";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
regId = GCMRegistrar.getRegistrationId(this);//这个是获取ID.如果没有获取到那么就需要注册了.
try {
if (regId.equals("")) {
 GCMRegistrar.register(this, SENDER_ID);//注册ID.注意SENDER_ID是 1-4节里获取到的值
} else {
httpsend(regId);//如果获取到ID的话 那就要把ID告诉您的服务器.让服务器可有找到你^_^
}
} catch (Exception e) {
Log.e("gcm", e.toString());
}
}


     3.现在我们来接收服务器推送过来的信息.

GCMIntentService接收推送的服务.在这里可能最重要的onMessage方法.服务器推送信息的话进入这个方法.

tip:获取推送信息的内容方法: onMessage中有 intent参数 intent.getStringExtra("msg").推送信息中有keyname为msg的话这样可以获取到

SENDER_ID:这个已经在上边讲解了.

public class GCMIntentService extends GCMBaseIntentService  {
public GCMIntentService() {
super(MainActivity.SENDER_ID);
}
@Override
protected void onError(Context context, String errorId) {
}
@Override
protected void onMessage(Context context, Intent intent) {
if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
procMessage(context, intent);
}
}
@Override
protected void onRegistered(Context context, String regId) {
}
@Override
protected void onUnregistered(Context context, String regId) { 
}
// 받은 푸쉬메시지를 처리한다.
private void procMessage(Context context, Intent intent) {
Log.i("gcm", "procMessage");
}
}

  好了这样安卓端就开发完了。当然根据您的项目可能还需要扩充^_^


3. 服务端                  

服务端需要添加两个包.gcm-server.jar 与 json-simple-1.1.1.jar. 下载地址网上也一大堆.不懂可以百度一下哦~

这里我就不细说了。


其实服务端要做的也是两部分. 

       一个是保存安卓端传过来的ID.(您得知道您要把推送信息传给谁吧?呵呵)

      另一个是推送信息给指定ID.(这是当然的了 要不然写这个服务器干嘛?)


     看一下代码您可以发现 APKKEY是 1-3获取到的 SERVER API KEY的值. 为的是告诉谷歌GCM服务器您的KEY.

     regid是手机的ID.也就是要发送给谁.

     public class GCMPush extends ActionSupport{
private static final long serialVersionUID = 1L;
public final static String APIKEY="AIzaSyBAKPapwq7I22YpMT7_u5tcI5xddrAscgM";
public String pushGoogle(){
try {
HttpServletRequest request=ServletActionContext.getRequest();
String regid= request.getParameter("regid");

Sender sender=new Sender(APIKEY);
Message message=new Message.Builder().addData("msg", "gcm test").build();
List<String> list=new ArrayList<String>();
list.add(regid);
Result result=sender.send(message, regid, 5);
if (result!=null) {
System.out.println(result.getMessageId());
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
System.out.println(e.toString());
}
return null;
}
}


以上就是服务端的代码. 把需要的信息发送给 谷歌,那么谷歌就会为你解决一切^_^. 

       希望能帮助到各位。如果写的不好勿喷. 呵呵

      





0 0
原创粉丝点击