¿Cómo obtener las notificaciones push android de Córdoba, cuando la aplicación está en estado inactivo o está en segundo plano?
¿Cómo podemos obtener las notificaciones push de GCM en una aplicación Android android , incluso cuando la aplicación se vuelve inactiva o está en segundo plano.
"Katzer / cordova-plugin-background-mode" no parece funcionar …
- Aplicación híbrida de Visual Studio 2015 - obteniendo "EPERM, operación no permitida"
- jQuery mobile + phonegap select elemento muestra opciones muy lento
- Java.io.IOException: Preparar error .: status = 0x1
- ¿Cuáles son las ventajas y desventajas de usar Phonegap y Titanium?
- Cerrar la app de Córdova en el botón Atrás
" Estoy recibiendo las notificaciones push con éxito cuando la aplicación se ejecuta en primer plano "
Cordova versión: 4.3.0 android 4.4 phonegap 4.2.0
Copiaré mis funciones de notificación a continuación … en deviceready
Function onDeviceReady () {
try { pushNotification = window.plugins.pushNotification; jQuery("#app-status-ul").append('<li>registering ' + device.platform + '</li>'); if (device.platform == 'android' || device.platform == 'Android' || device.platform == 'amazon-fireos' ) { pushNotification.register(successHandler, errorHandler, {"senderID":"my-project-id","ecb":"onNotification"}); } 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); } }
y
Función onNotification (e) {
switch( e.event ) { case 'registered': if ( e.regid!='' ) { android_reg_id = e.regid; jQuery.ajax({ type:"POST", url:SITEURL+"index.php?r=Manageuser/App_Reg_Android", data:{regid: android_reg_id,employeeno:employeeno} }).done(function(msg) { }); } 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) { //jQuery("#app-status-ul").html('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>'); // 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("/www/"+ soundfile); my_media.play(); } else { if (e.coldstart) $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>'); else $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>'); //location.href = e.payload.redid; // otherwise we were launched because the user touched a notification in the notification tray. } jQuery("#app-status-ul").html('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>'); //window.localStorage.setItem("push_que", e.payload.redid); //location.href = e.payload.redid; break; case 'error': jQuery("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>'); break; default: jQuery("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>'); break; } }
Plugin que se utiliza es com.phonegap.plugins.PushPlugin 2.4.0 "PushPlugin"
- ¿Necesitan PhoneGap Apps conexión a Internet?
- Cámara en la aplicación de teléfono. Reiniciar la aplicación
- ¿A dónde apunta LocalFileSystem.PERSISTENT?
- Cordova-plugin-facebook4 mensaje con error de imagen en Android
- Cómo cambiar el nombre de android-debug.apk
- ¿Cómo puedo superponer una vista nativa encima de CordovaWebView de PhoneGap en Android?
- Modificar el comportamiento de carga de Cordova Plugin para acelerar el tiempo de carga
- Error en cordova Cuando el tipo "cordova build android"
No estoy seguro de qué plugin está utilizando para capturar la Notificación de empuje, pero te recomendaría usar el phonegap-build / PushPlugin . Tiene un controlador que captura las notificaciones cuando se abre la aplicación, en segundo plano o cerrado. Si pulsa en la Notificación, abrirá su aplicación.
Para usar el plugin, simplemente colócalo en tu código:
var pushNotification; document.addEventListener("deviceready", function(){ pushNotification = window.plugins.pushNotification; if ( device.platform == 'android' || device.platform == 'Android' ){ pushNotification.register( successHandler, errorHandler, { "senderID":"replace_with_sender_id", "ecb":"onNotification" }); } //the rest of your deviceReady function }); // result contains any message sent from the plugin call function successHandler (result) { alert('result = ' + result); } // result contains any error description text returned from the plugin call function errorHandler (error) { alert('error = ' + error); }
Ahora hemos configurado una instancia del complemento para la variable global pushNotification
y una instrucción if que registra su dispositivo android con el servicio GCM, pero debe colocar el senderID de su proyecto de API de Google aquí: "senderID":"replace_with_sender_id"
. Si el dispositivo se registró correctamente llamará a la función onNotification
. Esa función debe hacer algo como esto:
function onNotification(e) { console.log('event received: '+e.event); switch( e.event ) { case 'registered': if ( e.regid.length > 0 ) { //Here you should call a function that sends the registration-ID //to your server so you can save it and send push notifications to your device console.log("regID = " + e.regid); } break; case 'message': if ( e.foreground ) { //App was open when the notification was received console.log('foreground'); // on Android soundname is outside the payload. var soundfile = e.soundname || e.payload.sound; // if the notification contains a soundname, play it. var my_media = new Media("/android_asset/www/"+ soundfile); my_media.play(); } else { if ( e.coldstart ) { //App was closed console.log('coldstart'); } else { //App was open in the background console.log('background'); } } alert('message: '+e.payload.message); break; case 'error': alert('GCM error: '+e.msg); break; default: alert('An unknown event has occurred'); break; } }
Esta función recibe un evento del servicio GCM que le dice qué hacer. Si el dispositivo está registrado registra el ID de registro del dispositivo en la consola y si se recibió un mensaje, comprueba si la aplicación está abierta, cerrada o abierta en segundo plano y alertará el mensaje de alert('message: '+e.payload.message);
.
Como utilizas Android, acabo de incluir el código para Android. Espero que esto es lo que estabas buscando.
Recibir notificaciones push no requiere que la aplicación se ejecute en segundo plano.
El complemento Push de Cordova
Recomiendo este complemento: https://github.com/phonegap-build/PushPlugin para recibir notificaciones push (cuando la aplicación no se está ejecutando).
La documentación en esa página es bastante buena.
El complemento es compatible con iOS, Android y otras plataformas.
Opciones del lado del servidor
No sé lo que está ejecutando en el servidor, y en realidad no suena como que necesariamente tiene algún problema en el extremo del servidor, pero en el interés de proporcionar una más completa (y más general) cordova push solución respuesta, Quiero mencionar esto:
Para Android GCM push messaging, consulta https://www.npmjs.com/package/node-gcm
Y para la mensajería de empuje de APN de iOS hay https://github.com/argon/node-apn
He incluido estos enlaces porque, incluso si no se está ejecutando nodo en el servidor, la documentación de estas páginas es un gran punto de partida y ambos tienen enlaces a información más útil.
—– Actualización 4/12/2015 —–
El plugin recomendado anteriormente ha sido obsoleto, el complemento de reemplazo, https://github.com/phonegap/phonegap-plugin-push , tiene una interfaz mucho más simple.
Este sencillo ejemplo del código del cliente tiene todo lo que necesita para la mayoría de los casos de uso: https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/EXAMPLES.md
- Textwatcher no funciona en KitKat para el número como inputType
- Efecto de ondulación en la barra de herramientas cortada