继上次GCM(客户端),这边再说一下服务端,服务端的网上资料五花八门,有php的有j2ee的,也有android的,还有chromeposter的,但是感觉android的比较亲切,这边借鉴一下android的,说到底就是绑定一下regID,然后发送给服务器然后就盯着手机屏幕等消息ok了(前提是客户端可服务端regID一致),好了直接上马:
package com.example.gcmserverdemo;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;
public class MainActivity extends Activity {
private Button getToken;
private Button sendMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getToken = (Button) findViewById(R.id.getToken);
getToken.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
/**
* 这里请保持和客户端 的regId一致
*/
String devices = "APA91bF-EEpmKWyiqTIrdXKEDJSVu1pacx5ezmg5Pz6YoOTV9xE6TTWxEIox_Ju41zXN83ubDNBJ9fTGwBe0ttZbMvFeimcgq9TXRynVsa4xAyzujm3G8XedJbme-8R5yAMwpQ6Gf870lgSlHSSD-onNFxMeoTxuRA";// Client
// devices = "APA91bHZSzdwaTLBdCPcJA9OcQrqyk3F97Rr4Z0TyWc0YFkAAZusHCHLXSLf1KtySzxStMm6Lw7CRR8wA0pd4YZCZ1Uf6WLHrdsQFHrPlfa_4OcIep2BXULP3XcecQFCcgMldqJEu9PwbWeCpor0kVn6DPJHrIJEnw";
/**
* 这个也是在google consle的项目中的注册的server端的apikey,请区分android key和ios key等;
*/
Sender sender = new Sender(
"AIzaSyBmp3sEsGXdeIukGnjl7mObLZJ9dvSB0NM");// Android
// API
// KEY
Message message = new Message.Builder().addData(
"message", "123456").build();// 傳送的訊息
Result result = null;
try {
result = sender.send(message, devices, 5);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (result != null) {
if (result.getMessageId() != null) {
Looper.prepare();
Toast.makeText(MainActivity.this, "result.getMessageId() = "+result.getMessageId(), 200).show();
Log.i("result",
"getMessageId = " + result.getMessageId());
String canonicalRegId = result
.getCanonicalRegistrationId();
Log.i("canonicalRegId", "canonicalRegId = "
+ canonicalRegId);
}
}else {
Log.i("result =",
"null");
Toast.makeText(MainActivity.this, "result = null", 200).show();
}
}
}).start();
}
});
}
}
代码很简单,主要是在注释的地方要小心一下,还有就是将sdkmanager中的extra下下载的 Google Cloud Messaging for Android Library中的sdk\extras\google\gcm\gcm-server\dist中的 gcm-server.jar放到自己的libs下面,基本就OK了,当然记得要加权限,下面是我的mainfest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gcmserverdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
OK,到此GCM基本就好了,有兴趣的童鞋也可以到 GCM测试实例去下载我上传的sample。