首页 > 解决方案 > 如何从远程推送通知单击恢复应用程序

问题描述

我正在使用 firebase 将推送通知从服务器发送到我的应用程序,消息如下所示:

var message = new Message()
            {
                Notification = new Notification()
                {
                    Title = "Title - Test",
                    Body = "Body - Test",
                    
                },

                Token = registrationToken
            };

通知通过设备没有问题。单击通知时,我想要的只是在应用程序关闭时启动应用程序(这有效),如果应用程序在后台运行,则应用程序恢复。

当它在后台并单击通知时,我只会得到一个白屏。当我删除启动画面时,问题似乎消失了,但这不是一个理想的解决方案......这是相关代码,我做错了什么?

飞溅活动:

[Activity(Label = "MyApp",
        Theme = "@style/splashscreen",
        MainLauncher = true,
        NoHistory = true)]
    public class SplashActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
        }

        protected override void OnResume()
        {
            base.OnResume();

            var mainActivityIntent = new Intent(this, typeof(MainActivity));
            mainActivityIntent.AddFlags(ActivityFlags.SingleTop | ActivityFlags.NoAnimation);
            StartActivity(mainActivityIntent);
            this.Finish();
        }

        public override void OnBackPressed() { }
    }

主要活动:

[Activity(Label = "MyApp",
        Theme = "@style/MainTheme",
        LaunchMode = LaunchMode.SingleTop,
        MainLauncher = false,
        ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.FullSensor)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        public static MainActivity MainActivityInstance { get; private set; }
    
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            this.Window.SetFlags(WindowManagerFlags.KeepScreenOn, WindowManagerFlags.KeepScreenOn);
            this.Window.SetSoftInputMode(SoftInput.AdjustPan);

            Forms.Init(this, savedInstanceState);
            MainActivityInstance = this;

            LoadApplication(new App());
        }

标签: c#androidxamarinfirebase-cloud-messaging

解决方案


在 SplashActivity 上的 OnResume 方法中将 ActivityFlags.ClearTop 添加到 mainActivityIntent.AddFlags() 似乎有效:

protected override void OnResume()
        {
            base.OnResume();

            var mainActivityIntent = new Intent(this, typeof(MainActivity));
            mainActivityIntent.AddFlags(ActivityFlags.NoAnimation | ActivityFlags.SingleTop | ActivityFlags.ClearTop);
            StartActivity(mainActivityIntent);
            this.Finish();
        }

推荐阅读