Активация обработки URI
Важные API
- Windows.ApplicationModel.Activation.ProtocolActivatedEventArgs
- Windows.UI.Xaml.Application.OnActivated
Узнайте, как зарегистрировать приложение, чтобы стать обработчиком по умолчанию для имени схемы универсального идентификатора ресурса (URI). Классические приложения Windows и приложения универсальная платформа Windows (UWP) могут регистрироваться как обработчик по умолчанию для имени схемы URI. Если пользователь выбирает приложение в качестве обработчика по умолчанию для имени схемы URI, приложение будет активировано при каждом запуске типа URI.
Рекомендуется зарегистрировать только имя схемы URI, если ожидается обработка всех запусков URI для этой схемы URI. Если вы решили зарегистрировать имя схемы URI, необходимо предоставить пользователю функциональность, которая ожидается при активации приложения для этой схемы URI. Например, приложение, которое регистрируется для почтового адреса: имя схемы URI должно открываться для нового сообщения электронной почты, чтобы пользователь смог создать новую электронную почту. Дополнительные сведения о сопоставлениях URI см. в руководствах и контрольном списке для типов файлов и URI.
В этих шагах показано, как зарегистрировать имя alsdk://
пользовательской схемы URI и как активировать приложение при запуске alsdk://
URI пользователя.
Примечание.
В приложениях UWP определенные URI и расширения файлов зарезервированы для использования встроенными приложениями и операционной системой. Попытки регистрации приложения с зарезервированным универсальным кодом ресурса (URI) или расширением файла будут игнорироваться. Имена и типы файлов зарезервированных схем URI см. в алфавитном списке схем URI, которые нельзя зарегистрировать для приложений UWP, так как они зарезервированы или запрещены.
Шаг 1. Указание точки расширения в манифесте пакета
Приложение получает события активации только для имен схем URI, перечисленных в манифесте пакета. Вот как указать, что приложение обрабатывает alsdk
имя схемы URI.
В Обозреватель решений дважды щелкните package.appxmanifest, чтобы открыть конструктор манифестов. Выберите вкладку "Объявления" и в раскрывающемся списке "Доступные объявления" выберите "Протокол" и нажмите кнопку "Добавить".
Ниже приведено краткое описание каждого из полей, которые можно заполнить конструктором манифестов для протокола (дополнительные сведения см. в манифесте пакета AppX):
Поле | Description |
---|---|
Логотип | Укажите логотип, используемый для идентификации имени схемы URI в параметре Set Default Programs в панель управления. Если логотип не указан, используется небольшой логотип для приложения. |
Отображаемое имя | Укажите отображаемое имя, чтобы определить имя схемы URI в параметре Set Default Programs в панель управления. |
Имя | Выберите имя схемы URI. |
Обратите внимание , что имя должно быть во всех строчные буквы. | |
Зарезервированные и запрещенные типы файлов см. имена схем зарезервированных URI и типы файлов для алфавитного списка схем URI, которые нельзя зарегистрировать для приложений UWP, так как они зарезервированы или запрещены. | |
Исполняемый объект | Указывает исполняемый файл запуска по умолчанию для протокола. Если это не указано, используется исполняемый файл приложения. Если задано, строка должна иметь длину от 1 до 256 символов, должна заканчиваться значением ".exe", и не может содержать следующие символы: >, , <:, ", ", "? или *. При указании также используется точка входа. Если точка входа не указана, используется точка входа, определенная для приложения. |
Точка входа | Указывает задачу, которая обрабатывает расширение протокола. Обычно это полное имя пространства имен типа среда выполнения Windows. Если это не указано, используется точка входа для приложения. |
Начальная страница | Веб-страница, обрабатывающая точку расширяемости. |
Группа ресурсов | Тег, который можно использовать для группирования активаций расширений вместе для целей управления ресурсами. |
Требуемое представление (только для Windows) | Укажите поле "Требуемое представление", чтобы указать объем пространства, необходимого для окна приложения при запуске для имени схемы URI. Возможные значения для требуемого представления: Default, UseHalf, UseHalf, UseMore или UseMinimum. Обратите внимание, что Windows учитывает несколько различных факторов при определении конечного размера окна целевого приложения, например предпочтения исходного приложения, количества приложений на экране, ориентации экрана и т. д. Настройка требуемого представления не гарантирует определенное поведение окна для целевого приложения. Семейство мобильных устройств: требуемое представление не поддерживается в семействе мобильных устройств. |
Введите
images\Icon.png
в качестве логотипа.Введите
SDK Sample URI Scheme
отображаемое имяВведите
alsdk
имя.Нажмите клавиши CTRL+S, чтобы сохранить изменение в package.appxmanifest.
При этом в манифест пакета добавляется элемент Extension, подобный этому элементу. Категория 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. Обработка активированного события
Обработчик событий 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
}
}
}
Protected Overrides Sub OnActivated(ByVal args As Windows.ApplicationModel.Activation.IActivatedEventArgs)
If args.Kind = ActivationKind.Protocol Then
ProtocolActivatedEventArgs eventArgs = args As ProtocolActivatedEventArgs
' TODO: Handle URI activation
' The received URI is eventArgs.Uri.AbsoluteUri
End If
End Sub
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 не будет содержать предыдущее содержимое, которое приложение может иметь в текущем окне при приостановке. Приложения, которые решили использовать один кадр XAML для запуска и контракта файлов, должны очистить страницы в журнале навигации Frame перед переходом на новую страницу.
При запуске с помощью активации протокола приложения следует рассмотреть возможность включения пользовательского интерфейса, позволяющего пользователю вернуться на верхнюю страницу приложения.
Замечания
Любое приложение или веб-сайт может использовать имя схемы URI, включая вредоносные. Таким образом, любые данные, полученные в URI, могут поступать из ненадежного источника. Рекомендуется никогда не выполнять постоянное действие на основе параметров, которые вы получаете в URI. Например, параметры URI можно использовать для запуска приложения на странице учетной записи пользователя, но мы рекомендуем никогда не использовать их для непосредственного изменения учетной записи пользователя.
Примечание.
Если вы создаете имя схемы URI для приложения, обязательно следуйте инструкциям в RFC 4395. Это гарантирует, что ваше имя соответствует стандартам схем URI.
Примечание.
При запуске с помощью контракта протокола убедитесь, что кнопка "Назад" возвращает пользователя на экран, который запустил приложение, а не предыдущий контент приложения.
Мы рекомендуем приложениям создать новый кадр XAML для каждого события активации, открывающего новый целевой объект URI. Таким образом, обратная навигация для нового кадра XAML не будет содержать предыдущее содержимое, которое приложение может иметь в текущем окне при приостановке.
Если вы решите, что приложения будут использовать один кадр XAML для контрактов запуска и протокола, снимите страницы в журнале навигации frame перед переходом на новую страницу. При запуске с помощью контракта протокола рассмотрите возможность включения пользовательского интерфейса в приложения, которые позволяют пользователю вернуться в начало приложения.