没有调用Cordova PushNotification onNotificationGCM

时间:2015-04-30 10:18:37

标签: javascript angularjs cordova push-notification phonegap-pushplugin

我正在为Android / IOS进行推送。

我使用过cordova push-plugin https://github.com/phonegap-build/PushPlugin,它看起来效果很好。

信息:我正在使用AngularJS项目。

在我的NotificationHelper工厂中,我有这个init方法:

helper.init = function() {

    // Instanciate push plugin notification
    var pushNotification = window.plugins.pushNotification;

    var errorHandler = function(error) {
        logger.debug('errorHandler = ' + error);
    };

    if ($rootScope.isAndroid()) {
        var senderId = CONFIG.NOTIFICATION_ANDROID_SENDER_ID;
        pushNotification.register(function(result) {
            logger.debug('successHandler = ' + result);
        }, errorHandler, {
            'senderID' : senderId,
            'ecb' : 'onNotificationGCM'
        });
    }
};

我还在mains.js上定义了这些方法:

var onNotificationGCM = function(event) {
   // call back to web service in Angular.
   var elem = angular.element(document.querySelector('[ng-app]'));
   var injector = elem.injector();
   var service = injector.get('NotificationHelper');
   service.onNotificationGCM(event);
};

从主javascript调用angularJS工厂是一个技巧。

'onNotificationGCM'调用'NotificationHelper.onNotificationGCM'方法:

helper.onNotificationGCM = function(e) {
    switch (e.event) {
    case 'message':
        // Notification happened while app was in the foreground
        if (e.foreground) {
            logger.debug('[notification] [message] Foreground : ' + JSON.stringify(e));
        } else { // Notification touched in the notification tray
            logger.debug('[notification] [message] Background : ' + JSON.stringify(e));
            if (e.coldstart) {
                // App was not running and user clicked on notification
            } else {
                // App was running and user clicked on notification
            }
        }
        decriptPayloadNotification(e.payload);
        break;
    case 'registered':
        logger.debug('[notification] [registered] : ' + JSON.stringify(e));
        if (e.regid.length > 0) {
            registerUser(e.regid, 'gcm');
        }
        break;

    case 'error':
        logger.debug('[notification] [error] : ' + JSON.stringify(e));
        break;

    default:
        logger.debug('[notification] [default] : Unknown, an event was received and we do not know what it is : ' + JSON.stringify(e));
        break;
    }
};

在第一次使用期间,一切正常:

  • 已收到“已注册”活动
  • 收到通知
  • 当我在前台时,我收到'消息'事件:
  

NotificationHelper:[通知] [消息]前景:{“event”:“message”,“from”:“847593779913”,“message”:“Agenêts23/ 03 10h \ r \ n”,“collapse_key”: “do_not_collapse”,“foreground”:true,“payload”:{“lt”:“school”,“lv”:“E1154”,“notId”:“35429”,“title”:“Agenêtsle23/03 / 2015“,”消息“:”Agenêts23/ 03 10h \ r \ n“}}

  • 当我在后台时,如果我收到通知并在通知托盘上触摸它,我会收到“消息”事件:
  

NotificationHelper:[通知] [消息]背景:{“event”:“message”,“from”:“847593779913”,“message”:“la piscineseraferméejournéepourraison technique”,“coldstart”: false,“collapse_key”:“do_not_collapse”,“foreground”:false,“payload”:{“lt”:“游泳池”,“lv”:“E114”,“notId”:“29869”,“title”: “23/04/2015 fermeture de la piscine”,“message”:“la piscineseraferméejournéepourraison technique”}}

但是,如果我杀了我的应用程序,一切都停止工作。

如果我重新启动应用程序,我将不再收到'message'event,并且不会调用'onNotificationGCM'。

我发表了一些关于这个问题的文章,但没有成功:

Stackoverflow : Phonegap PushNotification to open a specific app page

有没有人对这个问题有所了解?

1 个答案:

答案 0 :(得分:0)

我问自己为什么它第一次正常工作而不是以下时间......我有这个想法:

  • 也许回调函数是第一次订阅插件而不是下次。

这正是我问题的根源。我只将一次“pushNotification.register”称为init插件并获取id ... 但是下次我启动应用程序时,我不再重新启动插件,因此pushplugin不知道在回调请求中调用哪种方法。

答案是:在每个应用程序启动时调用“pushNotification.register”!

在我的代码中,我必须在每个“deviceready”事件中调用下面的方法:

helper.init = function() {

// Instanciate push plugin notification
var pushNotification = window.plugins.pushNotification;

var errorHandler = function(error) {
    logger.debug('errorHandler = ' + error);
};

if ($rootScope.isAndroid()) {
    var senderId = CONFIG.NOTIFICATION_ANDROID_SENDER_ID;
    pushNotification.register(function(result) {
        logger.debug('successHandler = ' + result);
    }, errorHandler, {
        'senderID' : senderId,
        'ecb' : 'onNotificationGCM'
    });
}
};