在iOS上收到通知(带有Firebase插件)后,Ionic App在启动时冻结

时间:2019-01-03 09:27:50

标签: firebase ionic-framework push-notification

当我收到通知并关闭应用程序时,在离子(v1)应用程序上的iOS上出现问题。我使用插件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); 
 });

0 个答案:

没有答案