OnAppLinkRequestReceived(Uri uri)
,使我能够捕获令牌参数(
?token=xyz&refreshToken=abc
)。但是,在Windows(Winui 3)上,每当我打开诸如dayplanner://?token=xyz&refreshToken=abc
之类的链接时,我的应用程序的新实例就会开始,而不是重复使用已运行的实例。
地上,Windows从未在Windows上调用OnapplinkRinkRequelecteceerive。我尝试将以下内容添加到我的软件包中。AppxManifest:
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="dayplanner" />
</uap:Extension>
</Extensions>
我还尝试在我的Windows特定app.xaml.cs中尝试覆盖OnLaunched(LaunchActivatedEventArgs args)
或
OnActivated(IActivatedEventArgs args)
,但是要么在Mauiwinuiaiapplication中不存在这些覆盖,要么在打开链接时他们不会收到protintivativativatedEventargs。I遇到了建议使用Windows App SDK的AppInstance API(用于单稳定和协议处理)的建议,但是到目前为止,每次我测试URI链接时,它仍然会打开一个全新的实例,而不是将激活事件传递给现有的
solution是:
// In your App.xaml.cs
public partial class App : MauiWinUIApplication
{
// ...
protected override async void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
var appInstance = AppInstance.GetCurrent();
var e = appInstance.GetActivatedEventArgs();
// If it's not a Protocol activation, just launch the app normally
if (e.Kind != ExtendedActivationKind.Protocol ||
e.Data is not ProtocolActivatedEventArgs protocol)
{
appInstance.Activated += AppInstance_Activated;
base.OnLaunched(args);
return;
}
// If it's a Protocol activation, redirect it to other instances
var instances = AppInstance.GetInstances();
await Task.WhenAll(instances
.Select(async q => await q.RedirectActivationToAsync(e)));
return;
}
private void AppInstance_Activated(object? sender, AppActivationArguments e)
{
if (e.Kind != ExtendedActivationKind.Protocol ||
e.Data is not ProtocolActivatedEventArgs protocol)
{
return;
}
// Process your activation here
Debug.WriteLine("URI activated: " + protocol.Uri);
}
}
也在这里回答:Https://stackoverflow.com/a/79123126/17302880