window.plugin.pushNotification no está definido en Cordova 3.6.4

Soy nuevo en la construcción de aplicaciones multi-plataforma utilizando Córdoba. He seguido muchos tutoriales para crear una notificación push, pero no he podido hacerlo. El proceso que he seguido es:

  1. Creó un proyecto en la consola de Google, estableciendo el mensaje de notificación en la nube de Google para Android en "ACTIVADO".

  2. Proyecto creado como sigue

cmd:

Cordova create sampleApp com.sample sampleApp cordova platform add android cordova add plugin https://github.com/phonegap-build/PushPlugin.git 
  1. Editado el index.html bajo www/ añadido el archivo pushNotification.js .
  2. Cambió el archivo index.js en www/js para incluir el registro.

código:

 var pushNotification = window.plugins.pushNotification; console.log(pushNotification); pushNotification.register(app.successHandler, app.errorHandler,{"senderID":"MY_SENDER_ID","ecb":"app.onNotificationGCM"}); },successHandler: function(result) { alert('Callback Success! Result = '+result) },errorHandler:function(error) {    alert(error); },onNotificationGCM: function(e) {        switch( e.event )        {            case 'registered':                if ( e.regid.length > 0 )                {                    console.log("Regid " + e.regid);                    alert('registration id = '+e.regid);                }            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;        }    } 
  1. Después de agregar todos los requisitos, uso Cordova serve . A continuación, abra la página index.html y veo la window.plugin.pushNotification como indefinido . ¿Estoy haciendo algo mal que alguien me ayude con esto. He estado atascado con esto durante muchos días.

y este es mi archivo index.html

 <html> <head> <meta charset="utf-8" /> <meta name="format-detection" content="telephone=no" /> <meta name="msapplication-tap-highlight" content="no" /> <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 --> <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> <link rel="stylesheet" type="text/css" href="css/index.css" /> <title>Hello World</title> </head> <body> <div class="app"> <h1>Apache Cordova</h1> <div id="deviceready" class="blink"> <p class="event listening">Connecting to Device</p> <p class="event received">Device is Ready</p> </div> </div> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="js/index.js"></script> <script type="text/javascript" src="PushNotification.js"></script> </body> 

Ok, tuve exactamente el mismo problema – me tomó varias horas para encontrar una solución.

En primer lugar, no tenía que incluir "PushNotification.js" en mi archivo index.html. Cordova build manager gestiona las inclusiones mediante un archivo denominado "corodva_plugins.js".

Cuando busqué en el archivo mencionado anteriormente encontré la siguiente entrada:

  { "file": "plugins/com.phonegap.plugins.PushPlugin/www/PushNotification.js", "id": "com.phonegap.plugins.PushPlugin.PushNotification", "clobbers": [ "PushNotification" ] }, 

Así que vi que el método para llamar al complemento no es en realidad pushNotification, es PushNotification (capital "P").

 //var pushNotification = window.plugins.pushNotification; var pushNotification = window.plugins.PushNotification; 

Edit: Mirando en PushNotification.js me enteré de que el complemento funciona bien con window.plugins.pushNotification … pero sólo si cordova.js se incluye antes de su controlador. Por lo tanto, si incluye cordova.js (y por tanto PushNotification.js) antes de usarlo, funcionará.

Usted necesita esperar para deviceready evento hasta que, usted puede utilizar los plugins. Así que trate de envolver su código como este

 document.addEventListener("deviceready", function() { // Here you can use it: var pushNotification = window.plugins.pushNotification; ... }, false); 

Actualizar

Dado que el entrevistador le dijo que ya estaba envuelto dentro del controlador deviceready , la razón más probable es que está utilizando el serve para ejecutar la aplicación. usted debe tratar de construir el paquete real de su aplicación con cordova build y luego probarlo en el dispositivo real o incluso emulador.

Tuve el mismo problema hace unos días y finalmente pude entenderlo. Hay una nueva versión de plug-in de inserción telefónica y el que está utilizando está obsoleto.

En orer para hacerlo funcionar he instalado la nueva versión de plugin y he actualizado mi cordova a la última versión.

Vea el enlace para el nuevo plugin push: https://github.com/phonegap/phonegap-plugin-push

Pero el problema era el mismo. Tuve que mirar a ng-cordova.js y vi que había una nueva versión para $cordovaPush que es $cordovaPushV5 . Es la que debemos usar. El problema también se menciona en las cuestiones de los github.

Enlace de la edición de Github: https://github.com/driftyco/ng-cordova/issues/1152

Después de que usted tiene nuevo plugin instalado (y asegúrese de que ha instalado ngCordova como se describe en este enlace http://ngcordova.com/docs/install/ ). Usted está listo para ir. Lo único que tiene que hacer después de que el dispositivo listo evento es:

 var iosConfig = { badge: true, sound: true, alert: true }; $cordovaPushV5.initialize(iosConfig).then(function() { // DO WHATEVER YOU LIKE $cordovaPushV5.register().then(function(deviceToken) { // Success -- send deviceToken to server, and store for future use console.log("deviceToken: " + deviceToken); }, function(error) { console.log("register error: ", err); }); }); 
  • ¿Hay una manera de comprobar si la página se cargó desde el caché del navegador?
  • Añadir Javascript en Webview En Android
  • Detección de dispositivos de pantalla táctil con Javascript
  • Cómo comprobar la existencia de un archivo en la guía telefónica con un mensaje telefónico
  • Desarrollo de juegos de plataforma cruzada utilizando html5
  • Bootstrap 2.3 Problemas de menú plegables en Android Mobile
  • ¿Cuál es mejor usar Sencha Touch o phonegap para Android?
  • API de Google Map para aplicaciones Ionic
  • ¿Cómo evitar que el navegador Google Chrome android muestre la lupa cuando los usuarios hacen clic en un botón?
  • PushState en Android 4.0
  • ¿Cómo hacer la animación slide-in-up de la funcionalidad $ state.go en el marco iónico?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.