ionic集成jPush極光推送


一.簡介:

極光推送(JPush)是獨立的第三方雲推送平台,致力於為全球移動應用開發者提供專業、高效的移動消息推送服務。

極光推送,英文簡稱 JPush,是一個面向普通開發者開放的,免費的第三方消息推送服務。

 

二.官網:https://www.jiguang.cn/

首先注冊一個賬號,登陸平台,在控制台添加我們的應用信息

點擊提交

會成一個AppKey和Master Secret這兩個密鑰主要用來配置服務端發送通知使用。

 

三.開整

官方的栗子:https://github.com/jpush/jpush-phonegap-plugin

1.首先創建一個ionic項目jpushDemo

ionic start -a jpushDemo -i com.kangnuo.jpushDemo jpushDemo blank
ionic start -a 應用名  -i 包名 文件夾名 blank
項目創建完成,用IDE打開后發現這是一個完全空的項目,打開根目錄的config.xml發現上面配的-i com.kangnuo.jpushDemo 也就是包名完全沒啥用,還是com.ionicframework.starter,手動把包名改下com.kangnuo.jpushDemo
 
添加android平台
 
ionic  platform  add  android
 
2.安裝插件
 
插件下載:git clone https://github.com/jpush/jpush-phonegap-plugin.git
 
jPush 插件需要依賴org.apache.cordova.device這個插件,看插件名稱為舊版本device插件,新版為cordova-plugin-device,因為我們現在APP使用的為新版,先裝上新版本試試
 
ionic  plugin  add  cordova-plugin-device
然后安裝jpush: ionic plugin add 你的插件目錄/jpush-phonegap-plugin –variable API_KEY=appKey
 
發現報錯,error了一大堆英文,大體意思是我們需要org.apache.cordova.device這個插件,卻在項目中發現cordova-plugin-device這個插件。OK,刪掉cordova-plugin-device插件,裝上org.apache.cordova.device這個,重新裝jpush插件,成功。。 (注:現在新版插件已修改,沒有這個問題了)
 
有沒有什么辦法不用舊版的device插件,用最新的呢–>  看下jpush插件的config.xml文件 發現這樣一行配置
 
<dependency id=”org.apache.cordova.device” url=”https://github.com/apache/cordova-plugin-device.git”  /> 
 
id是老版的插件,url卻指向的新版插件,把id改成cordova-plugin-device重裝試下,OK 安裝成功。
 
3.項目配置
 
打開項目根目錄中app.js
 
直接貼配置代碼
 
angular.module(‘starter’, [‘ionic’,’ui.router’])

.run(function($ionicPlatform) {

    $ionicPlatform.ready(function () {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)
        if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
            cordova.plugins.Keyboard.disableScroll(true)
        }
        if (window.StatusBar) {
            StatusBar.styleDefault();
        }

        /**
         * 極光推送業務開始
         */

        //啟動極光推送服務
        window.plugins.jPushPlugin.init();

        //設置顯示最新得條數
        window.plugins.jPushPlugin.setLatestNotificationNum(5);

        //調試模式
        if (device.platform == "Android") {

            window.plugins.jPushPlugin.setDebugMode(true);
            window.plugins.jPushPlugin.setStatisticsOpen(true);
        }else {

            window.plugins.jPushPlugin.setDebugModeFromIos();
            window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0);
        }

        //獲取RegistrationID
        getRegistrationID();

        //設置別名
        window.plugins.jPushPlugin.setAlias("bbbb");

        if (window.localStorage.getItem("platformType") == "WEIXIN" && window.localStorage.getItem("RegistrationID")){

            jPushInfo(window.localStorage.getItem("key"),window.localStorage.getItem("RegistrationID"));
            window.plugins.jPushPlugin.setAlias(window.localStorage.getItem("RegistrationID"));
        }

        if (device.platform == "Android") {

            //ANDROID接收消息
            window.plugins.jPushPlugin.receiveNotificationInAndroidCallback = function (data) {

                //expresstion
            };

            //ANDROID打開消息
            window.plugins.jPushPlugin.openNotificationInAndroidCallback = function(data){

                //expresstion
            };

        }else {

            //IOS接收消息(APP在前台)
            document.addEventListener("jpush.receiveNotification", onReceiveNotification, false);

            //IOS打開消息
            document.addEventListener("jpush.openNotification", onOpenNotification, false);

            //IOS接收消息(APP在后台)
            document.addEventListener("jpush.backgoundNotification", onBackgroundNotification, false);

        }

        /**
         * 極光推送業務結束
         */
    });

    var onReceiveNotification = function(event) {

        //expresstion

    };

    var onBackgroundNotification = function (event) {

        //expresstion
    };

    var onOpenNotification = function(event) {

        //expresstion
    };


    var getRegistrationID = function() {

        window.plugins.jPushPlugin.getRegistrationID(onGetRegistrationID);
    };

    var onGetRegistrationID = function(data) {

        try {

            console.log("JPushPlugin:registrationID is " + data);

            if (data.length == 0) {
                window.setTimeout(getRegistrationID, 1000);
            }else {
                window.localStorage.setItem("RegistrationID",data);
            }

        } catch (exception) {
            console.log(exception);
        }
    };

    var isReceiveFunc = function (pushId) {

        //expresstion
    };

    var isOpenFunc = function (pushId) {

        //expresstion
    };
    
    var jPushInfo = function (key,RegistrationID) {
      
        //expresstion
    };

}); 
APP配置完成
 
打開極光控制台,找到jpushDemo的應用->推送消息,填寫推送內容點擊推送,手機就會收到推送消息了。
 
注:APP在運行時,手機會提示jPush建議集成SDK時添加統計代碼。
 
解決辦法:
        在 platforms/android/src/com/kangnuo/jpushDemo/MainActiovity.java中MainActivity類添加以下代碼
 
import cn.jpush.android.api.JPushInterface;

@Override
protected void onResume() {
  super.onResume();
  JPushInterface.onResume(this);
}
@Override
protected void onPause() {
  super.onPause();
  JPushInterface.onPause(this);
}

 

4.調試

jPush插件在使用過程中會用到手機接收通知,以及用戶打開手機通知等事件,這些jPush都已有現成的方法(receiveMessageInAndroidCallback,openNotificationInAndroidCallback ==)只要在這些回調方法中添加自己的業務邏輯代碼就可以,調試過程中SDK使用logCat來打印APP運行狀態。而且jPush在接受自定義消息時是不會顯示在手機通知欄中,需要通過log來進行調試,ionic APP中可以使用CLI方式運行來調試。

ionic cli 使用說明: http://ionicframework.com/docs/v2/cli/run/

命令:ionic run android -l -i

注:在使用中發現 app安裝到手機上打開一直提示 application error,network error ,需要添加白名單插件 ,運行

ionic  plugin  add  cordova-plugin-whitelist

然后就可以在terminal看到手機app運行時log信息了。。

 

5.服務端推送java實現方式

首先在項目中添加依賴包,打開pom.xml添加

<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.2.9</version>
</dependency>

推送實現方法(官方文檔很全)

    JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3);

        // For push, all you need do is to build PushPayload object.
        PushPayload payload = buildPushObject_all_all_alert();

        try {
            PushResult result = jpushClient.sendPush(payload);
            LOG.info("Got result - " + result);

        } catch (APIConnectionException e) {
            // Connection error, should retry later
            LOG.error("Connection error, should retry later", e);

        } catch (APIRequestException e) {
            // Should review the error, and fix the request
            LOG.error("Should review the error, and fix the request", e);
            LOG.info("HTTP Status: " + e.getStatus());
            LOG.info("Error Code: " + e.getErrorCode());
            LOG.info("Error Message: " + e.getErrorMessage());
        }

    //進行推送的關鍵在於構建一個 PushPayload 對象。以下示例一般的構建對象的用法。
    //快捷地構建推送對象:所有平台,所有設備,內容為 ALERT 的通知。
    public static PushPayload buildPushObject_all_all_alert() {
        return PushPayload.alertAll(ALERT);
    }

 

6.完成


免責聲明!

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



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