我想知道是否可以在针对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进行标准导航,而是对改为推送通知。我已经搜索了很多东西,但是所有的教程/文档都只是在控制台上进行了调试写操作,以证明所传递的自定义数据在那里,我也可以看到,我找不到任何可以处理实际用例的东西。可行的工作流以基于通知的轻击来控制导航。
任何帮助或指导将不胜感激。
先谢谢您。