Window.plugin.pushNotification не определена на Кордове 3.6.4

Я новичок в создании многоплатформенных приложений с использованием Cordova. Я следил за многими учебниками, чтобы создать push-уведомление, но не смог. Процесс, который я выполнил, следующий:

  1. Создав проект в консоли Google, установите для Google облако уведомлений для Android значение «ВКЛ».

  2. Создал проект следующим образом

CMD:

Cordova create sampleApp com.sample sampleApp cordova platform add android cordova add plugin https://github.com/phonegap-build/PushPlugin.git 
  1. Отредактировал index.html под www/ добавил файл pushNotification.js к нему.
  2. Изменен файл index.js в разделе www/js чтобы включить регистрацию.

код:

 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. После добавления всех требований я использую Cordova serve . Затем откройте страницу index.html, и я вижу window.plugin.pushNotification как undefined . Я делаю что-то неправильно, кто-нибудь может мне помочь с этим. Я застрял в этом много дней.

И это мой файл 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> 

Хорошо, у меня была такая же проблема – мне потребовалось несколько часов, чтобы найти решение.

Прежде всего, мне не пришлось включать «PushNotification.js» в мой файл index.html. Менеджер сборки в Кордове управляет включением файла с именем «corodva_plugins.js».

Когда я просмотрел файл, упомянутый выше, я нашел следующую запись:

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

Поэтому я увидел, что метод вызова плагина на самом деле НЕ pushNotification, это PushNotification (капитал «P»).

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

Изменить: Вглядываясь в PushNotification.js Я узнал, что плагин хорошо работает с window.plugins.pushNotification … но только если cordova.js включен перед вашим контроллером. Поэтому, если вы включите cordova.js (и, следовательно, PushNotification.js), прежде чем использовать его, он будет работать.

Вам нужно дождаться события deviceready, пока вы не сможете использовать плагины. Поэтому попробуйте обернуть свой код таким образом

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

Обновить

Поскольку вопросник сказал, что он уже завернут в обработчик deviceready , причина, по всей видимости, заключается в том, что вы используете приложение для запуска приложения. Вы должны попытаться создать фактический пакет из своего приложения с cordova build а затем проверить его на самом устройстве или даже на эмуляторе.

У меня была такая же проблема несколько дней назад, и, наконец, я мог понять это. Существует новая версия плагина push-phone push и тот, который вы используете, устарел.

В orer, чтобы он работал, я установил новую версию плагина, и я обновил свою кордову до последней версии.

См. Ссылку для нового плагина push: https://github.com/phonegap/phonegap-plugin-push

Но проблема была одна и та же. Мне пришлось посмотреть на ng-cordova.js и я увидел, что появилась новая версия для $cordovaPush которая является $cordovaPushV5 . Это тот, который мы должны использовать. Проблема была упомянута и в вопросах github.

Ссылка на Github: https://github.com/driftyco/ng-cordova/issues/1152

После этого у вас установлен новый плагин (и убедитесь, что вы установили ngCordova, как описано в этой ссылке http://ngcordova.com/docs/install/ ). Вы готовы к работе. Единственное, что вам нужно сделать после события готовности устройства:

 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); }); }); 
Intereting Posts