情况:
我正在为我的Ionic应用程序实现Ionic Push。
我已经完成了所有设置和注册,一切正常。 我已经测试了它并在设备上发送了一个curl请求(ios和android),我正确地收到了通知。
那又怎样?
我需要在控制器内部移动推送逻辑。 所以我可以检索registrationId并将其与其他用户数据一起保存在表中。为了以后在需要时使用它。
但是,当我从app.js中的.run()代码移动到控制器时,应用程序崩溃..
错误:
TypeError: Cannot read property 'init' of undefined
at http://localhost:8100/lib/ionic-platform-web-client/dist/ionic.io.bundle.js:5844:47
代码:
var push = new Ionic.Push({
"debug": true
});
push.register(function(token) {
console.log("My Device token:",token.token);
alert(token.token);
push.saveToken(token); // persist the token in the Ionic Platform
});
问题:
我真的不知道自己做错了什么。
$ionicPlatform.ready(function() {}
内的相同代码可以正常工作但不在控制器中......
我已经在新应用中测试了相同的逻辑,我确实可以将该逻辑放在控制器中。
你有什么想法,为什么这次我不能?
非常感谢!
答案 0 :(得分:0)
好的,我找到了解决方案。
我不得不将push逻辑留在run()方法中。阅读它似乎是最佳选择。
解决方案非常简单:
在run方法中注入$ rootScope并使用它来存储registrationId。
之后你可以用它做任何你想做的事情,例如向你的api发送一个post请求并保存在db中。
代码:
.run(function($ionicPlatform, $rootScope) {
$ionicPlatform.ready(function() {
var push = new Ionic.Push({
"debug": true
});
push.register(function(token) {
console.log("My Device token:",token.token);
push.saveToken(token); // persist the token in the Ionic Platform
$rootScope.registrationId = token.token; !! <--
});
});
})