Cordoba Push Notification (PhoneGap PushPlugin) not calling ecb callback (onNotificationAPN)

I am using the Cordova Push Notifications Plugin 1.3.4 plugin with my Cordova / Phonegap application. Unfortunately, when I receive a push notification, the ecb callback never starts in my JavaScript, and I cannot process the push notification (even when the application is running in the foreground).

I am using the sample code from the demo:

pushNotification.register(tokenHandler, errorHandler, {"badge": "true", "sound": "true", "alert": "true", "ecb": "onNotificationAPN"}); 

Registration completed successfully, but the following callback never starts:

 function onNotificationAPN (event) { if (event.alert) { navigator.notification.alert(event.alert); } } 
+8
cordova phonegap-pushplugin
source share
3 answers

The problem is how you defined your callback function, as a result of which the Push Push code verification of your callback (ie via [webView stringByEvaluatingJavaScriptFromString ) failed because it would not know about it.

If you define the callback function as a global object, the plugin will correctly launch your callback every time a new notification arrives:

 onNotificationAPN = function(event) { if (event.alert) { navigator.notification.alert(event.alert); }; }; 

For Android, you would define the onNotificationGCM in the same way.

+9
source share

Mobile answer fixed it for me! I kept looking for a solution for this, albeit for a GCM callback, but the functionality is the same.

I would raise Mobiletainment, but I am new here, and it will not allow me, but thanks!

For those who might be looking for a GCM solution (of which there are many on Googleverse without many good answers), there was my code that finally worked:

 // handle GCM notifications for Android onNotificationGCM = function(e){ alert('onGCM'); switch( e.event ) { case 'registered': if ( e.regid.length > 0 ) { console.log("Regid " + e.regid); //Do registration work here... } break; case 'message': // this is the actual push notification. its format depends on the data model from the push server alert('message = '+e.message+' msgcnt = '+e.msgcnt); break; case 'error': alert('GCM error = '+e.msg); break; default: alert('An unknown GCM event has occurred'); break; } } 
+2
source share

If you use with azure click ... below is the working code. (pushplugin for a telephone conversation)

  function InitpushNotificaions() { // alert("Notification setup"); try { mobileServiceClient = new WindowsAzure.MobileServiceClient('https://mobbacktest.azure-mobile.net/', 'RvahPxHKoEsGiLdlCYZpHBllvSVQxl66'); pushNotification = window.plugins.pushNotification; if (device.platform == 'android' || device.platform == 'Android' || device.platform == 'amazon-fireos') { // AndroId pushNotification.register(successHandler, errorHandler, { "senderID": "724086851305", "ecb": "onNotification" }); // required! } else { //IOS 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 APNS notifications for iOS onNotificationAPN=function (e) { if (e.alert) { $("#app-status-ul").append('<li>push-notification: ' + e.alert + '</li>'); // showing an alert also requires the org.apache.cordova.dialogs plugin navigator.notification.alert(e.alert); } if (e.sound) { // playing a sound also requires the org.apache.cordova.media plugin var snd = new Media(e.sound); snd.play(); } if (e.badge) { pushNotification.setApplicationIconBadgeNumber(successHandler, e.badge); } } //handle GCM notifications for Android onNotification = function (e) { // alert("gcm"); switch (e.event) { case 'registered': if (e.regid.length > 0) { // Your GCM push server needs to know the regID before it can push to this device // here is where you might want to send it the regID for later use. // alert('step 1 Azure! ' + e.regid); if (mobileServiceClient) { // alert('step 2 Azure!'); // Template registration. var template = "{ \"data\" : {\"message\":\"$(message)\"}}"; // Register for notifications. mobileServiceClient.push.gcm.registerTemplate(e.regid, "myTemplate", template, null) .done(function () { // alert('Registered template with Azure!'); }).fail(function (error) { //alert('Failed registering with Azure: ' + error); }); } 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 attention, throw up a dialog, etc. if (e.foreground) { // on Android soundname is outside the payload. // On Amazon FireOS all custom attributes are contained within payload var soundfile = e.soundname || e.payload.sound; // if the notification contains a soundname, play it. // playing a sound also requires the org.apache.cordova.media plugin var my_media = new Media("/res/" + beep.wav); alert("Message:"+e.message); my_media.play(); } else { // otherwise we were launched because the user touched a notification in the notification tray. if (e.coldstart) { } else { } } break; case 'error': break; default: break; } } function tokenHandler(result) { // $("#app-status-ul").append('<li>token: '+ result +'</li>'); // Your iOS push server needs to know the token before it can push to this device // here is where you might want to send it the token for later use. } function successHandler(result) { alert("Success handler:" + result); // $("#app-status-ul").append('<li>success:'+ result +'</li>'); } function errorHandler(error) { alert("Error handler:" + error); } 
+1
source share

All Articles