Appcenter push:基于自定义数据的动态导航

时间:2019-04-18 16:46:54

标签: xamarin.forms push-notification visual-studio-app-center

我想知道是否可以在针对Android和iOS的Xamarin Forms应用程序中使用AppCenter push获得一些帮助。

从本质上讲,我已经按照说明进行操作,并且能够在Android上的测试中看到推送通知。我知道前台通知和后台通知之间存在不同的行为,并且在发生PushNotificationReceived事件时已通过调试器逐步执行。

我遇到的问题是,当用户进入应用程序时,我找不到一种可靠的隔离方法,因为当用户未加载应用程序时,他们会点击通知。

在我的App.xaml.cs中,我具有以下内容:

protected override async void OnInitialized()
        {

            InitializeComponent();
            Push.PushNotificationReceived += Push_PushNotificationReceived;


            AppCenter.Start("ios={ios ID}" +
                  "uwp={Your UWP App secret here};" +
                  "android={android ID}",
                  typeof(Analytics), typeof(Crashes), typeof(Push));

            await NavigationService.NavigateAsync("Splash"); // this is my splash screen that shows

        }

private async void Push_PushNotificationReceived(object sender, PushNotificationReceivedEventArgs e)
        {
            if (e.CustomData != null)
            {
                if (e.CustomData.ContainsKey("roundId"))
                {
                    string roundId = e.CustomData["roundId"];
                   //I want to navigate directly to this UI 
                    await NavigationService.NavigateAsync($"IconNavigationPage/HomeView/Round?roundId={roundId}");
                }
            }
        }

因此,如您所见,在正常情况下,该应用将加载Splash视图,该视图会进行一些加载,然后重定向到主视图。收到通知且用户在后台运行应用程序时,在Android上运行正常。我将启动模式更改为SingleTop,并将以下内容添加到MainActivity.cs

    protected override void OnNewIntent(Android.Content.Intent intent)
            {
                base.OnNewIntent(intent);
                Push.CheckLaunchedFromNotification(this, intent);
            }

问题是,当应用程序不在后台运行时,当我点击通知时,将启动启动屏幕导航调用,然后在PushNotificationReceived事件中进行导航。从本质上讲,这会使应用程序加载事件中定义的用户界面,持续一秒钟,然后启动用户界面重定向。这是因为,当应用程序不在后台运行时,从通知的Tap加载应用程序时会运行OnInitialize()。

我已经尝试过尝试在Android MainActivity.cs文件中实现PushNotificationReceived事件处理程序,并且确实看到在Shared项目中的相同PushNotificationReceived事件处理程序之前触发了该事件。不幸的是,它在调用LoadApplication之后运行,因此我的共享项目的OnInitialize()首先被激发(它具有对Splash的导航调用)

我想我正在寻找的是关于如何才能完成通知共享项目的OnInitialize的一些指导,或者是指向指南的指导,而不是对Splash进行标准导航,而是对改为推送通知。我已经搜索了很多东西,但是所有的教程/文档都只是在控制台上进行了调试写操作,以证明所传递的自定义数据在那里,我也可以看到,我找不到任何可以处理实际用例的东西。可行的工作流以基于通知的轻击来控制导航。

任何帮助或指导将不胜感激。

先谢谢您。

0 个答案:

没有答案