Xamarin android - 推送通知 Intent extras 丢失

Xamarin android - push notification Intent extras lost

我已按照 this 指南在我的 Xamarin Forms 应用程序中设置推送通知。

我有一个包含两个 activity 的应用程序, 一溅 activity

Activity(Theme = "@style/SplashTheme",
        MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)]
    public class SplashAct: Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            StartActivity(typeof(MainActivity));
            Finish();
        }
    }

和 MainActivity

 [Activity(
        ClearTaskOnLaunch = false,
        FinishOnTaskLaunch = false,
        Theme = "@style/MainTheme",
        LaunchMode = LaunchMode.SingleTask,
        ScreenOrientation = ScreenOrientation.Portrait,
        ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public partial class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, Android.Gms.Tasks.IOnSuccessListener

在主要部分 activity 我已经重写了 OnNewIntent 方法

     protected override void OnNewIntent(Intent intent)
        {
            base.OnNewIntent(intent);
            ProcessNotificationActions(intent);
        }

并且我尝试使用在 Azure 上发布的网络 api 发送通知,正文为:

{
    "text": "Test msg",
    "action": "action_a"
}

在设备上,文本正确显示,但是当代码到达 OnNewIntent 方法时,意图没有额外内容,所以我丢失了“操作”值。

我该如何解决这个问题?

注意。我不能使用 LaunchMode = LaunchMode.SingleTop,否则 OnNewIntent 不会被调用,OnCreate 被调用并且应用程序显示空白屏幕。 仅当应用程序处于后台或关闭时才会发生这种情况。如果它在前台,一切正常。

附上示例、视频和信息以提出 POSTMAN\RESTER 请求。

Archive.zip

您的 SplashAct 设置为 MainLauncher,它将在您的推送通知被点击时启动。当它启动 MainActivity 时,首先收到的 Intent 不会自动传递附加信息。您可以在 SplashAct 中调用 StartActivity 时手动转移它们:

protected override void OnCreate(Bundle savedInstanceState)
{   
    base.OnCreate(savedInstanceState); 
    var intent = new Intent(Application.Context, typeof(MainActivity));
    intent.PutExtras(Intent);
    StartActivity(intent);
    Finish();
}