使用GCM服務(Google Cloud Messaging)實現Android消息推送

最近在網上查了關於不少Android消息推送的資料,其中主要有四種方法。html

1) 使用GCM服務(Google Cloud Messaging2) 使用XMPP協議(Openfire + Spark + Smack3) 使用MQTT協議 4) 使用HTTP輪循方式java

以上這四種方法的優缺點你們均可以到網上搜到,這裏提供一個參考的鏈接:http://blog.csdn.net/shagoo/article/details/7899466  在這裏我將使用GCM服務(Google Cloud Messaging來實現Android消息的推送。 注:本人已實現該推送功能,不過有些限制條件。android

Google Cloud Messaging推送消息流程:這裏我就稍微提下,咱們從本身的服務器上發送消息到google的服務器上,在經過google的服務器推送出去,具體的實現細節我也不深究了,也許有人就會問爲何要經過google的服務器推送呢,直接從本身的服務器上推送過去就行了;在此以前我也考慮過,但是中間有太多的實現細節,說實話樓主也不是很懂,因此也就妥協了.....web

實現該推送功能的必備條件: 1)你的SDK須要從SDK Manager裏安裝Google Cloud Messaging for Android Library,安裝步驟:啓動SDK Manager->Extras->勾選Google Cloud Messaging for Android Library這一項,而後安裝就能夠了。 2)你用來調試的模擬器或是真機必須支持Google APIs,好比說你用模擬器調試的話,在新建模擬器的時候「target」這一項要選擇Google APIs,版本要高於2.2。 3)gcm.jar文件,等你執行完第一步的時候,你就能夠在你的Android SDK目錄下的extras\google\gcm\samples\gcm-demo-client\libs目錄裏找到這個文件,把它複製到你的項目的libs目錄下,並添加路徑。 4)你的模擬器或是真機必須設置而且登入一個google帳戶,好比你在調試的時候出現ACCOUNT_MISSING錯誤提示,說明就是沒有登入google的賬號。 5)你的耐心。。。。。。 6)若是前面五點你都具有了,請往下看.......編程

下面我將一一介紹我實現的步驟: 1. 註冊用戶,獲得Project Number和APP keyProject Number就是咱們在後面編程時候所要用到的SENDER_ID 。開啓Google Cloud Messaging for Chrome服務。瀏覽器

 

a) 註冊完後點擊左側的Overview後,咱們在右邊就能夠看到Project Number,如上圖。服務器

 

b) 一樣,咱們點擊左邊的API Access就能夠看到API key,如上圖紅線的地方;若是你沒有API Key,你能夠點擊紅線部分的「Create new Server key...」來建立一個API keyapp

c) 其次咱們要開啓Google Cloud Messaging for Android服務,點擊頁面左邊的「Services」,在右邊的下面咱們就能夠找到Google Cloud Messaging for Android項,開啓它。以下圖。編輯器

2.如今咱們就要創建本身的服務器了(PS:別聽到服務器就懼怕,這裏只是創建一個小小的網站式服務器)。官網有兩種方式簡歷服務器,我採用的是App Engine for Java這個方法,具體能夠參考:http://developer.android.com/google/gcm/demo.html。  這裏我講講我是怎用App Engine for Java創建發送消息的服務器的。APP Engine for Java的下載地址: App Engine for Java a)在你安裝Google Cloud Messaging for Android Library後,你的Android SDK目錄下有一個extras/google/目錄,其中包含的目錄有gcm-client, gcm-server, samples/gcm-demo-client, samples/gcm-demo-server和samples/gcm-demo-appengine. b)進入samples/gcm-demo-appengine/src/com/google/android/gcm/demo/server/這個目錄,找到ApiKeyInitializer.java這個文件,用文本編輯器打開,找到replace_this_text_by_your_Simple_API_Access_key這句話,並用你的註冊時獲得的APP key替換它,保存。 c)打開dos窗口,開始->運行,在dos窗口下進入 samples/gcm-demo-appengine目錄,在dos中輸入ant -Dsdk.dir=D:\appengine-java-sdk runserver -Dserver.host=192.168.1.10 注:這裏的-Dsdk.dir=D:\appengine-java-sdk要根據本身的實際狀況來,-Dsdk.dir就是你存放appengine-java-sdk的目錄,而-Dserver.host就是你本身電腦的IP。 d)以上步驟你都沒出錯的話,就能夠打開瀏覽器輸入:http://192.168.1.10:8080/home若是出現的界面和一下的圖片同樣說明你已經配置成功,能夠開始寫Android的客戶端了。oop

3.下面咱們能夠開始着手寫Android的客戶端程序了,在文章的最後我會提供源碼的下載地址。
a)根據官網,咱們能夠知道首先要給程序添加依稀權限。添加權限你們能夠參考: http://developer.android.com/google/gcm/gs.html
[html]   view plain copy
  1. <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="xx"/>  
[html]   view plain copy
  1. <permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />  
  2. <uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />   
[html]   view plain copy
  1. <!-- App receives GCM messages. -->  
  2. <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />  
  3. <!-- GCM connects to Google Services. -->  
  4. <uses-permission android:name="android.permission.INTERNET" />   
  5. <!-- GCM requires a Google account. -->  
  6. <uses-permission android:name="android.permission.GET_ACCOUNTS" />  
  7. <!-- Keeps the processor from sleeping when a message is received. -->  
  8. <uses-permission android:name="android.permission.WAKE_LOCK" />  
[html]   view plain copy
  1. <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >  
  2.   <intent-filter>  
  3.     <action android:name="com.google.android.c2dm.intent.RECEIVE" />  
  4.     <action android:name="com.google.android.c2dm.intent.REGISTRATION" />  
  5.     <category android:name="my_app_package" />  
  6.   </intent-filter>  
  7. </receiver>  
[html]   view plain copy
  1. <service android:name=".GCMIntentService" />  
b)完成類GCMIntentService的編寫,該類必須繼承GCMBaseIntentService,在這裏咱們須要完成的方法有: --onRegistered(Context context, String regId) --onUnregistered(Context context, String regId) --onMessage(Context context, Intent intent) --onError(Context context, String errorId) --onRecoverableError(Context context, String errorId) 在onCreate方法裏咱們須要添加如下語句:
[java]   view plain copy
  1. GCMRegistrar.checkDevice(this);  
  2. GCMRegistrar.checkManifest(this);  
  3. final String regId = GCMRegistrar.getRegistrationId(this);  
  4. if (regId.equals("")) {  
  5.   GCMRegistrar.register(this, SENDER_ID);  
  6. else {  
  7.   Log.v(TAG, "Already registered");  
  8. }  
c)其實在咱們安裝完Google Cloud Messaging for Android Library后里面就有一個目錄tras\google\gcm\samples\gcm-demo-client,這裏就有Android客戶端的源碼,只是咱們須要作些修改,咱們須要修改目錄samples/gcm-demo-client/src/com/google/android/gcm/demo/app下的CommonUtilities.java 裏的 SENDER_ID  SERVER_URL。修改以下:
[java]   view plain copy
  1. static final String SERVER_URL = "http://192.168.1.10:8080/gcm-demo";  
  2. static final String SENDER_ID = "4815162342";  
注:這裏的SERVER_URL和SENDER_ID要根據你本身的實際狀況來,到這裏咱們的程序就基本寫完了。下面就就能夠運行進行調試了...... 當你啓動模擬器或是真機而且以上步驟都沒錯的話,再次向瀏覽器中輸入 http://192.168.1.10:8080/home出現的界面以下圖所示。
4.這裏樓主提供Android客戶端程序的下載地址,服務器還需本身配置,下載地址: GCM-Demo 注:此博文也是樓主根據官網總結出來的,不免有錯,你們勿噴,若是你們有更好的方法,歡迎拿出來分享。 PS:但願你們下載了源碼後能耐下心來看看,要知其然還要知其因此然。 最後,但願你們尊重勞動者的成果,在轉載的時候加上本文連接:http://blog.csdn.net/jasonzhou613/article/details/8864302
相關文章
相關標籤/搜索