在上一篇文章我們介紹了建立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); }
不要忘記在AndroidManifest.xml中增加需要的許可權。
完成之後。就可以把程式安裝到手機上面,開啟手機的網路,程式會自動進行註冊,螢幕上顯示裝置註冊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 stubGCMSend send = new GCMSend();send.sendMessage("Hello world");}public void sendMessage(String msg){try{String serverKey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";//serverkey 就是你在API Project中API Access建立server key之後得到的API KeyString 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發送程式