今天來說一下極光推送的故事,極光推送是一個(gè)獨(dú)立的第三方云推送平臺(tái)。大家可以看一下極光推送官網(wǎng)的SDK文檔,比我寫的詳細(xì)得多!
簡(jiǎn)單使用##
- 1、在這之前必須要注冊(cè)一個(gè)極光推送的賬號(hào),否則一切都是白談
- 2、創(chuàng)建一個(gè)應(yīng)用,可以是android、ios、wp,這里我注冊(cè)的是android應(yīng)用,需要注意的是應(yīng)用包名,請(qǐng)讓包名和你的開發(fā)項(xiàng)目的包名相同,此時(shí)就會(huì)生成AppKey
- 3.1、此時(shí)就可以點(diǎn)擊“下載 Android Example”下載一個(gè)例子源碼,在開發(fā)平臺(tái)(Eclipse)導(dǎo)入此應(yīng)用,在手機(jī)上運(yùn)行,然后在極光的后臺(tái)推送消息,此時(shí)就可以收到推送消息
- 3.2、如果不需要Example源碼,完全可以自己一步一步創(chuàng)建工程,進(jìn)行編寫
編寫代碼##
- 1、下載極光推送的Android SDK文檔
- 2、導(dǎo)入 SDK 開發(fā)包到你自己的應(yīng)用程序項(xiàng)目
- 復(fù)制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目錄下
- 復(fù)制 libs/armeabi/libjpush1xy.so 到工程 libs/armeabi 目錄下
- 復(fù)制 libs/armeabi-v7a/libjpush.so 到工程 libs/armeabi-v7a 目錄下
- 3、配置 AndroidManifest.xml
- 復(fù)制備注為 "Required" 的部分
- 將備注為替換包名的部分,替換為當(dāng)前應(yīng)用程序的包名
- 將AppKey替換為在Portal上注冊(cè)該應(yīng)用的的Key,例如(9fed5bcb7b9b87413678c407)
- 4、添加代碼
- 以下代碼定制一個(gè)本應(yīng)用程序 Application 類。需要在 AndoridManifest.xml 里配置。請(qǐng)參考上面 AndroidManifest.xml 片斷,或者 example 項(xiàng)目。
public class ExampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}
}
- 以下代碼定制一個(gè)本應(yīng)用程序 Application 類。需要在 AndoridManifest.xml 里配置。請(qǐng)參考上面 AndroidManifest.xml 片斷,或者 example 項(xiàng)目。
- 5 、現(xiàn)在就可以將極光推送Demo作為Android Studio的Module運(yùn)行在真機(jī)或虛擬機(jī)上,并調(diào)試了
高級(jí)功能##
-
1、在我們接收到極光推送給我們的消息,我們是可以進(jìn)行處理的,但是在這之前我們必須要在 AndroidManifest.xml 里添加如下的配置信息。
<receiver android:name="Your Receiver" android:enabled="true"> <intent-filter> <action android:name="cn.jpush.android.intent.REGISTRATION" /> <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <category android:name="You package Name" /> </intent-filter> </receiver> -
2、創(chuàng)建你的廣播接收者,重寫onReceive方法
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Log.d(TAG, "onReceive - " + intent.getAction());if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent .getAction())) { System.out.println("收到了自定義消息。消息內(nèi)容是:" + bundle.getString(JPushInterface.EXTRA_MESSAGE)); // 自定義消息不會(huì)展示在通知欄,完全要開發(fā)者寫代碼去處理 } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent .getAction())) { System.out.println("收到了通知"); // 在這里可以做些統(tǒng)計(jì),或者做些其他工作 } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent .getAction())) { System.out.println("用戶點(diǎn)擊打開了通知"); // 在這里可以自己寫代碼去定義用戶點(diǎn)擊后的行為 String extra = bundle.getString(JPushInterface.EXTRA_EXTRA); try { JSONObject jo = new JSONObject(extra); String url = jo.getString("url"); // 打開瀏覽器 Uri uri = Uri.parse(url); Intent i = new Intent(Intent.ACTION_VIEW, uri); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } catch (JSONException e) { e.printStackTrace(); } } }
擴(kuò)展知識(shí)##
- 場(chǎng)景一、其實(shí)極光推送不僅僅只是推送通知而已,也可以通知自定義消息,比如說Json消息,如果有一個(gè)ListView需要更新數(shù)據(jù),我們甚至不需要進(jìn)行下拉刷新,假設(shè)我們要從服務(wù)器加載一條新聞數(shù)據(jù),當(dāng)后臺(tái)管理員添加新聞數(shù)據(jù)的時(shí)候,服務(wù)器端就返回一條Json信息給客戶端,然后我就就可以獲取到新聞數(shù)據(jù),把數(shù)據(jù)直接添加到ListVIew中即可。
- 場(chǎng)景二:聊天軟件的實(shí)現(xiàn)。假設(shè)張三要通過我們的軟件和某妹子進(jìn)行聊天,那么就可以采用極光推送,當(dāng)張三發(fā)送“約嗎?”消息后,我們其實(shí)可以把消息通過某接口(服務(wù)器端人員寫的)發(fā)送到我們的自己的服務(wù)器上,然后我們的服務(wù)器要做的事情是找到到推送給那個(gè)人,然后在調(diào)用極光推送的接口推送消息給妹子。反過來也是一樣,妹子發(fā)送消息“傻逼,滾”消息時(shí),也是把消息發(fā)送到我們的服務(wù)器,我們的服務(wù)器找到推送的目標(biāo)是“張三”,然后我們的服務(wù)器調(diào)用接口,讓極光的服務(wù)器推送消息給張三。