我正在为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
有没有人对这个问题有所了解?
答案 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'
});
}
};