在上一篇文章我们介绍了建立google API project,得到了你的project ID跟server key。在这篇文章中,我们需要通过这两个键值来进行消息推送。本文例子根据google官方提供的例子改写,如果需要下载google例子的话,可以去android SDK manager的Extras里面 下载Google Cloud Messaging for Android Library,然后例子就在android-sdk-windows\extras\google\gcm里面。
我们先在android程序上面加上向GCM注册的代码,然后开启广播服务。
MainActivity.java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); checkNotNull(SENDER_ID, "SENDER_ID"); //SENDID 就是我们在上一章建立Google API Project中得到的project ID GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this); setContentView(R.layout.main); mDisplay = (TextView) findViewById(R.id.display); registerReceiver(mHandleMessageReceiver, new IntentFilter(DISPLAY_MESSAGE_ACTION)); String regId = GCMRegistrar.getRegistrationId(this); //regId 程序向GCM注册之后得到的设备ID if (regId.equals("")) { //如果是空,则需要向你的API project注册 GCMRegistrar.register(this, SENDER_ID); String rid = GCMRegistrar.getRegistrationId(this); Log.i(TAG, "registering device (regId = " + rid + ")"); GCMRegistrar.setRegisteredOnServer(this, true); } else { if(GCMRegistrar.isRegisteredOnServer(this)){ mDisplay.append(regId + "\n"); Log.i(TAG, "registering device (regId = " + regId + ")"); }else{ GCMRegistrar.setRegisteredOnServer(this, true); } } }
然后在接收到消息之后,读取信息。
GCMIntentService.java
@Override protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); String message = ""; try { String action = intent.getAction(); if (action.equals("com.google.android.c2dm.intent.RECEIVE")) { message = intent.getStringExtra("msg"); } } catch(Exception e){ e.printStackTrace(); } // String message = getString(R.string.gcm_message); displayMessage(context, message); // notifies user generateNotification(context, message); }
完成之后。就可以把程序安装到手机上面,打开手机的网络,程序会自动进行注册,屏幕上显示设备注册ID。
然后开始写推送的代码
GCMSend.java
import com.google.android.gcm.server.Message; import com.google.android.gcm.server.Result; import com.google.android.gcm.server.Sender; public class GCMSend { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub GCMSend send = new GCMSend(); send.sendMessage("Hello world"); } public void sendMessage(String msg){ try{ String serverKey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; //serverkey 就是你在API Project中API Access创建server key之后得到的API Key String regId = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; // 你的设备中的app向GCM注册得到的值, 即 GCMRegistrar.getRegistrationId(this); Sender sender = new Sender(serverKey); Message message = new Message.Builder() .addData("msg", msg) .build(); Result result = sender.send(message, regId, 5); String status = "Sent message to one device: " + result; System.out.println(status); }catch(Exception e){ e.printStackTrace(); } } }在电脑上运行这个程序,就可以把消息(“Hello World”)发送到你的设备上面了.
代码下载(请把例子里面的SEND_ID,serverKey 跟regId改成你的值)
android接收程序
GCM发送程序