javascript - ngCordova notificationReceived 事件未触发

标签 javascript android angularjs cordova ngcordova

我正在 ionic(angular + cordova)上开发应用程序,为了访问我使用 ngCordova 的 cordova 插件(angular 的 cordova 插件实现)。我有一个 $cordovaPush plugin 的问题在安卓中。

我在 GCM 中通过 senderID 成功注册了一个用户:

$cordovaPush.register({
    senderID: MY_SENDER_ID
});

我从 $cordovaPush:notificationReceived 事件中得到一个 regid:

$rootScope.$on('$cordovaPush:notificationReceived', function(event, notification){
    if(notification.event === 'registered'){
         if(notification.regid.length > 0) {
             ServerCommunicatorService.makeRequest('POST', 'auth/update-gcm-id', {gcm_id: notification.regid});
         }
     }
});

然后我有一个这样的监听器,可以在前台显示通知并在 Controller 中执行一些操作:

$rootScope.$on('$cordovaPush:notificationReceived', function(event, notification){
    if(notification.event === 'message'){
        $cordovaToast.show(notification.message, 'long', 'center');
        $rootScope.$broadcast('notificationReceived', notification);
    }
});

最后是问题:成功注册后,当我从服务器发送通知时,我收到了通知(我在前台)。如果我通过点击设备上的“主页”按钮使应用程序后台运行,我会收到一条状态栏通知。从状态中选择该通知将我的应用程序带到最前面,我在事件处理程序中收到通知。现在一切都很好。但!当我完全退出应用程序并从服务器发送通知时,我会在状态栏中看到它。我单击它,我的应用程序重新启动,此后我在状态栏中收到所有通知,但无法在监听器中获取它们。

在文档中说:

最后,如果您通过点击主页上的后退按钮完全退出应用程序,您可能仍会收到通知。在通知托盘中触摸该通知将重新启动您的应用程序并允许您处理该通知 (COLDSTART)。在这种情况下,将在传入事件上设置冷启动标志。

可能是什么问题?提前致谢!!

最佳答案

好的解决方案是在每次应用程序启动时注册(即使在通知托盘中触摸通知之后)。

关于javascript - ngCordova notificationReceived 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30453170/

相关文章:

javascript - 单击按钮更改 div css 不起作用

javascript - JSON stringify 返回 null(C# WebBrowser 控件)

android - 显示调试视角时 Eclipse 挂起

java - 如何保存 Gingerbread 上的果冻 bean 按钮设计

angularjs - 在链接函数中找不到指令 templateUrl 中的元素

javascript - 在 JavaScript 中将 JSON 从文件读取到下拉列表?

javascript - 服务器是否总是按照发送顺序接收 AJAX 请求?

c# - 将 for 循环与 if 和 else 结合使用

html - 如何调整图像周围的文字以避免重叠

AngularJS UI Bootstrap 0.6.0 Modal 与 Module.Controller() 语法