Приложение Ionic зависает при запуске после получения уведомления на iOS (с плагином Firebase) - PullRequest
0 голосов
/ 03 января 2019

У меня проблема с 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); 
 });
...