了解如何注册应用程序,使其成为统一资源标识符(URI)方案名称的默认处理程序。 Windows 桌面应用和通用 Windows 平台 (UWP) 应用都可以注册为 URI 方案名称的默认处理程序。 如果用户选择你的应用作为 URI 方案名称的默认处理程序,则每次启动该类型的 URI 时,都会激活你的应用。
如果希望处理该类型的 URI 方案的所有 URI 启动,建议仅注册 URI 方案名称。 如果选择注册 URI 方案名称,则必须为最终用户提供为该 URI 方案激活应用时预期的功能。 例如,一个注册了 mailto: URI 方案名称的应用程序应当打开一个新的电子邮件,以便用户可以撰写新的邮件内容。 有关 URI 关联的详细信息,请参阅 文件、文件夹和库。
这些步骤演示如何注册自定义 URI 方案名称、alsdk://
,以及如何在用户启动 alsdk://
URI 时激活应用。
重要 API
本主题使用以下 API:
- Windows.ApplicationModel.Activation.ProtocolActivatedEventArgs
- Windows.UI.Xaml.Application.OnActivated
- AppInstance.GetActivatedEventArgs (应用实例的激活事件参数)
注释
在 Windows 中,某些 URI 和文件扩展名保留供内置应用和作系统使用。 尝试使用预留的 URI 或文件扩展名注册应用程序的行为将被忽略。 请参阅 保留的 URI 方案名称和文件类型,了解您无法为应用注册的 URI 方案的字母顺序列表,因为它们是保留的或禁止的。
步骤 1:在包清单中指定扩展点
应用仅接收程序包清单中列出的 URI 方案名称的激活事件。 下面是如何指示您的应用程序处理 alsdk
URI 协议名称。
在 解决方案资源管理器中,双击 package.appxmanifest 打开清单设计器。 选择 声明 选项卡,然后在 可用声明 下拉列表中选择 协议,然后单击 添加。
您可以在协议的清单设计器中填写的每个字段的简要说明如下(有关详细信息,请参阅 AppX 程序包清单):
领域 | DESCRIPTION |
---|---|
徽标 | 指定用于在 控制面板上 设置默认程序 中标识 URI 方案名称的徽标。 如果未指定徽标,则使用应用的小型徽标。 |
显示名称 | 指定显示名称,以在 控制面板上 设置默认程序 中标识 URI 方案名称。 |
名称 | 选择 URI 方案的名称。 |
注意 名称必须采用所有小写字母。 | |
保留和禁止文件类型 要查看无法注册为 Windows 应用的 Uri 方案字母顺序列表,请参阅 保留 URI 方案名称和文件类型 ,因为这些名称和文件类型要么是保留的,要么是禁止的。 | |
可执行文件 | 指定协议的默认启动可执行文件。 如果未指定,则使用应用的可执行文件。 如果指定,字符串的长度必须介于 1 到 256 个字符之间,必须以“.exe”结尾,并且不能包含以下字符:>、<、:、“、|、?或 *。 如果指定,则还会使用 入口点。 如果未指定 入口点,则使用为应用定义的入口点。 |
入口点 | 指定处理协议扩展的任务。 这通常是 Windows 运行时类型的完全命名空间限定名称。 如果未指定,则使用应用的入口点。 |
起始页 | 负责处理扩展点的网页。 |
资源组 | 一个标记,可用于将扩展激活组合在一起,以便进行资源管理。 |
所需视图(仅限 Windows) | 指定 Desired View 字段,以表示应用程序窗口在为 URI 方案名称启动时所需的空间量。
Desired View 的可能值有默认、使用较少、使用一半、使用更多或 使用最小量。 注意 Windows 在确定目标应用的最终窗口大小时考虑了多种不同的因素,例如源应用的偏好设定、屏幕上的应用数、屏幕方向等。 设置 期望视图 并不能保证目标应用的特定窗口行为。 移动设备系列:移动设备系列不支持所需视图。 |
输入
images\Icon.png
作为 徽标。输入
SDK Sample URI Scheme
作为 显示名称输入
alsdk
作为 名称。按 Ctrl+S 将更改保存到 package.appxmanifest。
这会向包清单添加类似于此扩展元素的 扩展 元素。 windows.protocol 类别表明应用程序处理
alsdk
URI 方案名称。
<Applications>
<Application Id= ... >
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="alsdk">
<uap:Logo>images\icon.png</uap:Logo>
<uap:DisplayName>SDK Sample URI Scheme</uap:DisplayName>
</uap:Protocol>
</uap:Extension>
</Extensions>
...
</Application>
</Applications>
步骤 2:添加正确的图标
成为 URI 方案名称默认值的应用在其图标显示在整个系统中的各个位置,例如在默认程序控制面板中。 将 44x44 图标与项目一起用于此目的。 匹配应用磁贴徽标的外观,并使用应用的背景色,而不是使图标透明。 使徽标扩展到边缘,不要留空白。 在白色背景上测试图标。 有关图标的更多详细信息,请参阅 应用图标和徽标。
步骤 3:处理激活的事件
注释
在 WinUI 应用中,在 App.OnLaunched(或在任何时候)中,可以调用(AppInstance.GetActivatedEventArgs)来检索激活的事件参数,并检查它们以确定应用是如何激活的。 有关 UWP 和 WinUI 应用之间的生命周期差异的详细信息,请参阅 应用程序生命周期功能迁移。
在 UWP 应用中, OnActivated 事件处理程序接收所有激活事件。 Kind 属性指示激活事件的类型。 此示例设置为处理 协议 激活事件。
public partial class App
{
protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.Protocol)
{
ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
// TODO: Handle URI activation
// The received URI is eventArgs.Uri.AbsoluteUri
}
}
}
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs const& args)
{
if (args.Kind() == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
{
auto protocolActivatedEventArgs{ args.as<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs>() };
// TODO: Handle URI activation
auto receivedURI{ protocolActivatedEventArgs.Uri().RawUri() };
}
}
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args)
{
if (args->Kind == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
{
Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ eventArgs =
dynamic_cast<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^>(args);
// TODO: Handle URI activation
// The received URI is eventArgs->Uri->RawUri
}
}
注释
通过协议协定启动时,请确保“后退”按钮将用户返回到启动应用的屏幕,而不是应用以前的内容。
以下代码以编程方式通过其 URI 启动应用:
// Launch the URI
var uri = new Uri("alsdk:");
var success = await Windows.System.Launcher.LaunchUriAsync(uri)
有关如何通过 URI 启动应用的更多详细信息,请参阅 启动 URI的默认应用。
建议应用为每个打开新页面的激活事件创建新的 XAML 框架 。 这样,新 XAML Frame 的导航后台堆栈将不会包含应用在挂起时当前窗口中可能具有的任何以前的内容。 决定使用单个 XAML Frame 的应用程序在处理启动和文件合同时,应在导航到新页面之前清除 Frame 的导航日志中的页面。
通过协议激活启动时,应用应考虑包括允许用户返回到应用顶部页面的 UI。
注解
任何应用或网站都可以使用您的 URI 方案名称,包括恶意的应用或网站。 因此,在 URI 中获取的任何数据都可能来自不受信任的源。 建议不要根据 URI 中收到的参数执行永久操作。 例如,URI 参数可用于将应用启动到用户帐户页,但我们建议你永远不要使用它们直接修改用户帐户。
注释
如果要为应用创建新的 URI 方案名称,请务必按照 RFC 4395中的指南进行操作。 这可确保名称符合 URI 方案的标准。
注释
通过协议协定启动 UWP 应用时,请确保“后退”按钮将用户带回启动应用的屏幕,而不是应用以前的内容。
我们建议应用为每个激活事件创建新的 XAML Frame,以打开新的 Uri 目标。 这样,新 XAML Frame 的导航后台堆栈将不会包含应用在挂起时当前窗口中可能具有的任何以前的内容。
如果你决定希望应用使用单个 XAML Frame 进行启动和协议协定,请在导航到新页面之前清除 Frame 导航日记中的页面。 通过协议合同启动时,请考虑在应用中集成 UI,使用户能够回到应用的顶部。