Phonegap IOS – 插件推送设置

我正在使用Phonegap和Phonegap Build开发一个应用程序。 该应用程序已基本完成,但我不在推送通知。

我正在努力获得一个甚至被注册的设备。 我已经将下面的插件添加到我的项目(添加到phonegap构build的configuration) https://github.com/phonegap/phonegap-plugin-push

我添加了插件,并在我的JavaScript文件中有以下内容。

var app = { // Application Constructor initialize: function () { this.bindEvents(); }, // Bind Event Listeners // // Bind any events that are required on startup. Common events are: // 'load', 'deviceready', 'offline', and 'online'. bindEvents: function () { document.addEventListener('deviceready', this.onDeviceReady, false); }, // deviceready Event Handler // // The scope of 'this' is the event. In order to call the 'receivedEvent' // function, we must explicitly call 'app.receivedEvent(...);' onDeviceReady: function () { app.receivedEvent('deviceready'); var push = PushNotification.init({ "android": { "senderID": "1234567890" }, "ios": { "alert": "true", "badge": "true", "sound": "true" }, "windows": {} }); push.on('registration', function (data) { console.log("registration event"); //document.getElementById("regId").innerHTML = data.registrationId; alert(data.registrationId) console.log(JSON.stringify(data)); }); push.on('notification', function (data) { console.log("notification event"); console.log(JSON.stringify(data)); var cards = document.getElementById("cards"); var card = '<div class="row">' + '<div class="col s12 m6">' + ' <div class="card darken-1">' + ' <div class="card-content black-text">' + ' <span class="card-title black-text">' + data.title + '</span>' + ' <p>' + data.message + '</p>' + ' </div>' + ' </div>' + ' </div>' + '</div>'; cards.innerHTML += card; push.finish(function () { console.log('finish successfully called'); }); }); push.on('error', function (e) { console.log("push error"); }); }, // Update DOM on a Received Event receivedEvent: function (id) { var parentElement = document.getElementById(id); var listeningElement = parentElement.querySelector('.listening'); var receivedElement = parentElement.querySelector('.received'); listeningElement.setAttribute('style', 'display:none;'); receivedElement.setAttribute('style', 'display:block;'); console.log('Received Event: ' + id); } }; function successHandler(result) { alert('result = ' + result); //Here you will get your device id. } function errorHandler(error) { alert('error = ' + error); } 

所以,我不确定该从哪里出发。 我已经build立了一个推送向导的帐户,并创build了额外的证书,但没有拿起任何设备,因为我认为没有设备设置为接收通知。

所以我想我的主要问题是,我是否错过了像注册阶段,我的设备注册接收通知的地方愚蠢的东西?

你没有正确使用this上下文。 这是一个常见的错误。 JavaScript this不工作像Java this

它不工作的原因是因为this运行时得到解决,而不是组装时间 (或编译时 )。 当事件触发时, this将解决到全局,因为你的app对象现在超出了范围。 事件触发* app对象的*外部。

一个快速的解决办法是做app.onDeviceReady而不是this.onDeviceReady你可以testing这个你的onDeviceReady()一个全局函数,并离开this地方。

这些video应该有帮助。 – 祝你好运

  • JavaScript中的上下文 – 1/4 – JavaScript的“This”的目的和问题

  • JavaScript中的上下文 – 2/4 – JavaScript如何判断“实际上”是什么?

  • 在JavaScript中的上下文 – 3/4 – “这”可能不是你所期望的和如何修复它

  • 在JavaScript中的上下文 – 4/4 – 掌握“这个:”其他技术和未来的支持

所以有2个部分,首先是jesseMonroy提到的,我的代码没有被正确拾取,我的js文件没有正常运行。

第二部分是我没有调用一个注册函数,它允许你得到一个device_token。

  push.registerDevice({ alert: true, badge: true, sound: true }, function (status) { app.myLog.value += JSON.stringify(['registerDevice status: ', status]) + "\n"; app.storeToken(status.deviceToken); alert(status.deviceToken) }); 

这是我错过了。 我的整个init部分看起来像这样;

 var push = PushNotification.init({ "android": { "senderID": "1234567890" }, "ios": { "alert": "true", "badge": "true", "sound": "true" }, "windows": {} }); push.on('registration', function (data) { console.log("registration event"); //document.getElementById("regId").innerHTML = data.registrationId; alert(data.registrationId) console.log(JSON.stringify(data)); }); push.on('notification', function (data) { console.log("notification event"); console.log(JSON.stringify(data)); var cards = document.getElementById("cards"); var card = '<div class="row">' + '<div class="col s12 m6">' + ' <div class="card darken-1">' + ' <div class="card-content black-text">' + ' <span class="card-title black-text">' + data.title + '</span>' + ' <p>' + data.message + '</p>' + ' </div>' + ' </div>' + ' </div>' + '</div>'; cards.innerHTML += card; push.finish(function () { console.log('finish successfully called'); }); }); push.on('error', function (e) { console.log("push error"); }); // var pushNotification = window.plugins.PushNotification; push.registerDevice({ alert: true, badge: true, sound: true }, function (status) { app.myLog.value += JSON.stringify(['registerDevice status: ', status]) + "\n"; app.storeToken(status.deviceToken); alert(status.deviceToken) });