У меня проблема с iOS в моем приложении ionic (v1), когда я получаю уведомление и приложение закрывается. Я использую плагин Cordova-Plugin-Firebase.
Маленький значок «1» хорошо отображается на значке. Но когда я нажимаю на уведомление (или когда я открываю приложение простым нажатием на значок приложения), приложения случайно замирают на заставке. Проблема в том, что иногда приложение открывается хорошо, а иногда зависает, и я не определил причину.
Я подумал, что, возможно, плагин Firebase не был загружен, поэтому я добавил в свой код множество мер безопасности и операторов if, но он все еще зависает.
Кроме того, мне пока не удается поймать сообщения об ошибках в консоли. Каждый раз, когда я пытаюсь поймать эту ошибку, на самом деле приложение открывается хорошо ...
Вопрос на github: https://github.com/arnesson/cordova-plugin-firebase/issues/811
Это фрагмент моего кода по управлению уведомлениями в моем главном контроллере:
var firebase_ready = function() {
if(typeof cordova != "undefined" && cordova && typeof window.FirebasePlugin != "undefined" && window.FirebasePlugin) {
try {
var saveToken = function(token) { // Save token
if(token !== null && token !== ''){
window.localStorage.setItem('firebase_token',token);
onNotificationOpen();
}
};
var errorToken = function(err) { // Error token
console.log('error retrieving firebase token: ' + err);
};
var manageToken = function(success) {
if(success) {
window.FirebasePlugin.getToken(saveToken, errorToken);
window.FirebasePlugin.onTokenRefresh(saveToken, errorToken);
}
};
var onNotificationOpen = function() {
window.FirebasePlugin.onNotificationOpen(function(data){
//Notification received on device tray and tapped by the user. [In background]
if(typeof data != "undefined" && data && data.tap){
console.log('Notification BG');
} else if(typeof data != "undefined" && data){ // App in foreground
console.log('Notification FG');
if(typeof data.aps != "undefined" && data.aps && data.aps.badge) {
var badgeNum = angular.isNumber(data.aps.badge) ? parseInt(data.aps.badge) : 0;
window.FirebasePlugin.setBadgeNumber(badgeNum);
} else if(typeof data.notification != "undefined" && data.notification && data.notification.badge) {
var badgeNum = angular.isNumber(data.notification.badge) ? parseInt(data.notification.badge) : 0;
window.FirebasePlugin.setBadgeNumber(badgeNum);
}
}
}, function(msg){ console.log('onNotification callback successfully registered: ' + msg); },
function(err){ console.log('Error registering onNotification callback: ' + err); }
);
};
if($ionicPlatform.is('ios')) {
window.FirebasePlugin.hasPermission(function(data){
if(!data.isEnabled) {
window.FirebasePlugin.grantPermission(manageToken, errorToken);
} else {
manageToken(true);
}
});
}
} catch(e) { console.log('Error firebase: ' + e); }
}
};
$ionicPlatform.ready(function() {
$timeout(function() { // I tried with a timeout here without any success
firebase_ready();
},200);
});