【更新】PhoneGap實現信息推送-基於極光推送(Android版)

極光推送插件安裝地址: 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 <說明來自開源中國>

相關文章
相關標籤/搜索