Google Cloud Messaging(GCM) for Android, android平台消息推送技术(二):GCM推送

在上一篇文章我们介绍了建立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 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”)发送到你的设备上面了.

Google Cloud Messaging(GCM) for Android, android平台消息推送技术(二):GCM推送_第1张图片


代码下载(请把例子里面的SEND_ID,serverKey 跟regId改成你的值)

android接收程序

GCM发送程序



你可能感兴趣的:(android,exception,String,api,Google,平台)