通过推送通知打开应用程序时未注册后退按钮处理程序

Posted

技术标签:

【中文标题】通过推送通知打开应用程序时未注册后退按钮处理程序【英文标题】:Back button handler not being registered when opening the app via push notification 【发布时间】:2019-12-07 16:12:20 【问题描述】:

我有一个用 Ionic v1 和 AngularJS 编写的应用程序。 该应用程序使用$ionicPlatform.registerBackButtonAction 来处理设备的后退按钮操作。 正常使用该应用程序时一切正常。当应用程序被推送通知打开时,问题就开始了。

当应用程序不在后台并通过单击推送通知打开时,后退按钮处理程序未注册并且物理后退按钮将我抛出应用程序。 如果我单击屏幕上的任意位置(单击,而不是滚动),则正在注册触摸事件并且一切正常。

我已尝试在推送通知事件启动后在多个位置注册该事件。 我尝试在屏幕上的空白区域以编程方式模拟触摸事件。 我已经尝试调度 resume 事件来模拟从暂停状态返回。 我尝试在页面加载后以编程方式重新加载页面。 似乎没有任何效果。

这是我在 app.run 中注册的 $ionicPlatform.registerBackButtonAction 事件处理程序:

$ionicPlatform.registerBackButtonAction(function(e) 
            e.preventDefault();

            function showConfirm() 
                var confirmPopup = $ionicPopup.show(
                    title : 'Close',
                    template : '<div>Do you want to close the app?</div>',
                    buttons : [
                        
                            text : '<b>Cancel</b>'
                        , 
                        
                            text : '<b>Approve</b>',
                            type: 'button-positive',
                            onTap : function() 
                                ionic.Platform.exitApp();
                            
                        
                    ]
                );
            ;

            // Is there a page to go back to?
            if ($ionicHistory.backView()) 
                // Go back in history
                if($rootScope.pushPressed2) 
                    $location.path('/app/home').replace();
                
                else 
                    $rootScope.backButtonPressed = true;
                    $ionicHistory.backView().go();
                
             
            else 
                if($rootScope.pushPressed2) 
                    $location.path('/app/home').replace();
                
                else 
                    showConfirm();
                
            

            return false;
        , 101);

【问题讨论】:

【参考方案1】:
    $ionicPlatform.registerBackButtonAction(function(event) 
    
       if ($ionicHistory.currentStateName() === "home"   ) 
     

           $cordovaDialogs.confirm('Are You Sure You Want to Exit?', 'AppName', ['Cancel','OK'])
        .then(function(buttonIndex) 
          // no button = 0 'OK' = 1 'Cancel' = 2
          var btnIndex = buttonIndex;
          if(buttonIndex==2)
          
              ionic.Platform.exitApp();
          
        );
         
else
        
            if($ionicHistory.currentStateName() === "login" )
            
                ionic.Platform.exitApp();
            
            else
            
                $ionicHistory.goBack();
            

        


      , 100);

【讨论】:

这不是我的问题的答案。

以上是关于通过推送通知打开应用程序时未注册后退按钮处理程序的主要内容,如果未能解决你的问题,请参考以下文章

应用关闭时未收到 Android 推送通知

Xamarin.iOS 应用程序未运行时未处理 Amazon SNS 推送通知

打开应用程序并锁定屏幕时未收到 Ionic FCM 推送通知,除非被点击

IBM Worklight 6.0.0.1 - 点击通知时未打开启用推送的应用程序

应用程序在 iOS 11 中处于后台时未收到推送通知

通过 FCM 发送时未收到推送通知,但在 IOS 上通过 APN 发送时收到