極光推送插件安裝地址: java
https://github.com/jpush/jpush-phonegap-plugin
安裝插件後,須要在AndroidManifest.xml中配置極光平臺申請的App Key: android
<meta-data android:name="JPUSH_APPKEY" android:value="aca4b37e5c00d477b*****" />
在JPushPlugin.java文件的22行處有報錯,須要把這裏修改成你本身的主包名。 git
插件中JpushPlugin.js中setTags方法存在bug,須要在data參數加上[],以下所示: github
JPushPlugin.prototype.setTags = function(data){ try{ this.call_native("setTags",[data],null); }catch(exception){ console.log(exception); } }
另外因爲極光推送插件使用了PhoneGap的device插件,所以須要安裝它: apache
cordova plugin add org.apache.cordova.device
若是須要對全部用戶推送信息,只須要在App啓動時初始化插件便可: json
document.addEventListener("deviceready",function(){ //插件初始化 window.plugins.jPushPlugin.init(); }, false );
若是須要對某一個用戶進行推送,須要在插件初始化後,獲取用戶的設備ID,並存儲至服務端: 數組
document.addEventListener("deviceready",function(){ //插件初始化 window.plugins.jPushPlugin.init(); window.plugins.jPushPlugin.getRegistrationID(function(id){ //將獲取到的id存入服務端 }); }, false);
若是須要對某一類人推送信息,能夠爲設備設置tag,好比爲同年級同專業的用戶設置相同的tag: app
//登陸後設置tag,tag格式爲'tag_'+年級id+'_'+專業id,以下所示,多個標籤用逗號隔開var tag = 'tag_16_1'; //爲當前設備設置tag window.plugins.jPushPlugin.setTags(tag); //退出登陸時,清除tag,就不會再接收到推送信息了 window.plugins.jPushPlugin.setTags('');
點擊通知欄的回調方法: 函數
//點擊通知欄的回調,在這裏編寫特定邏輯 window.plugins.jPushPlugin.openNotificationInAndroidCallback= function(data){ console.log(data); }
data的格式相似於下面的例子,解析JSON數據便可完成自定義邏輯: this
{ "alert": "你好 , 這是靈動工大推送的一條信息", "extras": { "cn.jpush.android.MSG_ID": "692692481", "app": "com.jiusem.jingle", "cn.jpush.android.ALERT": "詳細內容", "cn.jpush.android.EXTRA": "{ "article_id":1 }", //文章id "cn.jpush.android.PUSH_ID": "692692481", "cn.jpush.android.NOTIFICATION_ID": 692692481, "cn.jpush.android.NOTIFICATION_TYPE": "0" } }
好了,上面的配置完成後,就能夠在極光後臺進行通知的推送了。
然而,根據上面的介紹,卻存在一個嚴重的問題,只有當App處於運行狀態時,點擊通知欄,才能成功調用openNotificationInAndroidCallback回調函數。
當App最小化或者沒有開啓時,即便收到推送消息,點擊後也只能打開App首頁,並不能完成更多的邏輯。
針對這個問題,我對官方的插件進行了改進:
1 在JPushPlugin.java中添加如下方法:
//獲取推送信息,供App啓動或恢復活動時調用 //若是有信息返回json字符串,不然返回空 void getPushData(JSONArray data, CallbackContext callbackContext) { JSONObject jsonData = openNotificationObject(JPushPlugin.notificationAlert,JPushPlugin.notificationExtras); callbackContext.success(jsonData.toString()); JPushPlugin.notificationAlert = null; JPushPlugin.notificationExtras = null; }
記得在methodList數組中添加該方法名,不然方法不能被JS接口調用。
2 在JPushPlugin.js中添加如下方法:
JPushPlugin.prototype.getPushData = function(callback){ try{ var data=[]; this.call_native("getPushData",[data],callback); }catch(exception){ console.log(exception); } }
3 再也不使用openNotificationInAndroidCallback做爲獲取推送信息的回調,而採用下面的方法:
document.addEventListener('deviceready', function(data){ window.plugins.jPushPlugin.getPushData(function(data){ if(data!='{}'){ alert(data); } }); }, false); document.addEventListener('resume', function(data){ window.plugins.jPushPlugin.getPushData(function(data){ if(data!='{}'){ alert(data); } }); }, false); //data即爲獲取到的推送消息,格式爲json字符串 { "alert": "你好 , 這是靈動工大推送的一條信息", "extras": { "cn.jpush.android.MSG_ID": "692692481", "app": "com.jiusem.jingle", "cn.jpush.android.ALERT": "詳細內容", "cn.jpush.android.EXTRA": "{"article_id":1}", //文章id "cn.jpush.android.PUSH_ID": "692692481", "cn.jpush.android.NOTIFICATION_ID": 692692481, "cn.jpush.android.NOTIFICATION_TYPE": "0" } }
這樣,問題便迎刃而解了!
示例代碼已上傳到git上,可供參考:
http://git.oschina.net/jiusem/TestPush
固然,極光推送的內容遠比上面介紹的要多,還支持自定義消息和富媒體消息的推送,這裏只是作一個簡單的介紹和入門,具體請移步官方文檔。
另外,除了在極光後臺進行推送操做,還能夠利用極光提供的服務端SDK或API來完成該工做,請參考我其餘的文章。
歡迎加QQ羣交流:454566813 <說明來自開源中國>