离子推:当推送逻辑在控制器内时,应用程序中断

时间:2016-08-12 14:07:43

标签: android ios angularjs ionic-framework push-notification

情况:

我正在为我的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() {}内的相同代码可以正常工作但不在控制器中......

我已经在新应用中测试了相同的逻辑,我确实可以将该逻辑放在控制器中。

你有什么想法,为什么这次我不能?

非常感谢!

1 个答案:

答案 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;  !! <-- 

    });

  });
})