最近在網上查了關於很多Android消息推送的資料,其中主要有四種方法。
1) 使用GCM服務(Google Cloud Messaging) 2) 使用XMPP協議(Openfire + Spark + Smack) 3) 使用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 key,Project 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的客戶端了。

- <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="xx"/>
- <permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />
- <uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />
- <!-- App receives GCM messages. -->
- <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
- <!-- GCM connects to Google Services. -->
- <uses-permission android:name="android.permission.INTERNET" />
- <!-- GCM requires a Google account. -->
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <!-- Keeps the processor from sleeping when a message is received. -->
- <uses-permission android:name="android.permission.WAKE_LOCK" />
- <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
- <intent-filter>
- <action android:name="com.google.android.c2dm.intent.RECEIVE" />
- <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
- <category android:name="my_app_package" />
- </intent-filter>
- </receiver>
- <service android:name=".GCMIntentService" />
- GCMRegistrar.checkDevice(this);
- GCMRegistrar.checkManifest(this);
- final String regId = GCMRegistrar.getRegistrationId(this);
- if (regId.equals("")) {
- GCMRegistrar.register(this, SENDER_ID);
- } else {
- Log.v(TAG, "Already registered");
- }
- static final String SERVER_URL = "http://192.168.1.10:8080/gcm-demo";
- static final String SENDER_ID = "4815162342";
