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


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

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

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

Google Cloud Messaging推送消息流程:這里我就稍微提下,我們從自己的服務器上發送消息到google的服務器上,在通過google的服務器推送出去,具體的實現細節我也不深究了,也許有人就會問為什么要通過google的服務器推送呢,直接從自己的服務器上推送過去就好了;在此之前我也考慮過,可是中間有太多的實現細節,說實話樓主也不是很懂,所以也就妥協了.....

實現該推送功能的必備條件: 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 key

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的客戶端了。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM