Search code examples
javascriptcordovajquery-mobilechrome-gcm

show push notification only when app is not running in cordova android


I have a push notification integrated with GCM It's working fine. Whenever push notification comes then it redirected to specific page when user outside the application. But whenever user inside the application then it also redirect the specific page when notification come. So i don't want to redirect to specific page when user inside the. Please help me...

Here is my code...For Push Notification

var pushNotification;
function onDeviceReady() {
    $("#app-status-ul").append('<li>deviceready event received</li>');
    document.addEventListener("backbutton", function (e) {
        $("#app-status-ul").append('<li>backbutton event received</li>');
        if ($.mobile.activePage.is('#indexPage')) {
            
            e.preventDefault();
            navigator.app.exitApp();
        }
        else {
            navigator.app.backHistory();
        }
    }, false);
    try {
         pushNotification = window.plugins.pushNotification;
        $("#app-status-ul").append('<li>registering ' + device.platform + '</li>');
        if (device.platform == 'android' || device.platform == 'Android') {
            pushNotification.register(successHandler, errorHandler, { "senderID": "XXXXXXXXX", "ecb": "onNotification" });		// required!
        }
        //else {
        //    pushNotification.register(tokenHandler, errorHandler, { "badge": "true", "sound": "true", "alert": "true", "ecb": "onNotificationAPN" });	// required!
        //}
    }
    catch (err) {
        txt = "There was an error on this page.\n\n";
        txt += "Error description: " + err.message + "\n\n";
        alert(txt);
    }
}
// handle GCM notifications for Android
function onNotification(e) {
    $("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>');
    switch (e.event) {
        case 'registered':
            if (e.regid.length > 0) {
                $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");
                localStorage.setItem("REGID", e.regid);
                console.log("regID = " + e.regid);
            }
            break;
        case 'message':
            // if this flag is set, this notification happened while we were in the foreground.
            // you might want to play a sound to get the user's attention, throw up a dialog, etc.
            if (e.foreground) {
                $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>');
                window.localStorage.setItem("push_que", e.payload.id);
                window.localStorage.setItem("recordId",e.payload.recordId);
                var push_que = e.payload.id;
                var soundfile = e.soundname || e.payload.sound;
                var my_media = new Media("/android_asset/www/" + soundfile);
                my_media.play();
            }
            else {	
                if (e.coldstart) {
                    $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>');
                    window.localStorage.setItem("push_que", e.payload.id);
                    window.localStorage.setItem("recordId",e.payload.recordId);
                }
                else
                    $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>');
                window.localStorage.setItem("push_que", e.payload.id);
                window.localStorage.setItem("recordId",e.payload.recordId);

            }
            $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>');
          
            //android only
            $("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>');
            //amazon-fireos only
            $("#app-status-ul").append('<li>MESSAGE -> TIMESTAMP: ' + e.payload.timeStamp + '</li>');
            onResume();
            break;
        case 'error':
            $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>');
            break;
        default:
            $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>');
            break;
    }
    pushNotify();
}
function successHandler(result) {
    $("#app-status-ul").append('<li>success:' + result + '</li>');
}
function errorHandler(error) {
    $("#app-status-ul").append('<li>error:' + error + '</li>');
}

Here is onResume() method which helps to redirect specific page

function onResume() {
    //toast('App resumed', 'short');

    var que_push = window.localStorage.getItem("push_que");
    if (que_push == "inboxDetails") {
        $.mobile.changePage("#inboxDetails");
        window.localStorage.removeItem("push_que");
    }
    if (que_push == "trackComplaintTable") {
        var recordId = window.localStorage.getItem("recordId");
        showtrackcomplaintdetail(recordId);
        $.mobile.changePage("#trackComplaintTable");
        window.localStorage.removeItem("push_que");
    }
    // if a number is sent  open a specific news article calling a specific funcion that loads the "articles"
    if (que_push != "inboxDetails" && que_push != "trackComplaintTable" && que_push != "") {
        window.localStorage.removeItem("push_que");
    }

}


Solution

  • You only need to pass onResume() function in else block of if (e.foreground) statement ** inside **onNotification(e) function