仅当应用程序不是 运行 时在 cordova android 中显示推送通知
show push notification only when app is not running in cordova android
我有一个与 GCM 集成的推送通知,它工作正常。每当推送通知出现时,当用户在应用程序外部时它会重定向到特定页面。但是每当用户进入应用程序时,它也会在通知到来时重定向特定页面。所以我不想在用户进入时重定向到特定页面。请帮助我...
这是我的代码...用于推送通知
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>');
}
这是有助于重定向特定页面的 onResume() 方法
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");
}
}
您只需要在 if (e.foreground) 语句的 else 块中传递 onResume() 函数 ** 在 **onNotification(e ) 函数
我有一个与 GCM 集成的推送通知,它工作正常。每当推送通知出现时,当用户在应用程序外部时它会重定向到特定页面。但是每当用户进入应用程序时,它也会在通知到来时重定向特定页面。所以我不想在用户进入时重定向到特定页面。请帮助我...
这是我的代码...用于推送通知
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>');
}
这是有助于重定向特定页面的 onResume() 方法
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");
}
}
您只需要在 if (e.foreground) 语句的 else 块中传递 onResume() 函数 ** 在 **onNotification(e ) 函数