Поделиться через


Включение приложений для веб-сайтов с помощью обработчиков URI приложений

Приложения для веб-сайтов связывают приложение с веб-сайтом, чтобы при открытии ссылки на веб-сайт приложение запускалось вместо открытия браузера. Если приложение не установлено, веб-сайт открывается в браузере как обычно. Пользователи могут доверять этому интерфейсу, так как только проверенные владельцы контента могут зарегистрировать ссылку. Пользователи смогут проверить все зарегистрированные ссылки веб-приложения, перейдя в раздел "Параметры > приложений для > веб-сайтов".

Чтобы включить связывание веб-приложений, вам потребуется:

  • Определение URI приложения будет обрабатываться в файле манифеста.
  • JSON-файл, определяющий связь между приложением и веб-сайтом. с именем семейства пакетов приложений в том же корневом каталоге узла, что и объявление манифеста приложения.
  • Обработка активации в приложении.

Примечание.

Начиная с обновления Windows 10 Creators, поддерживаемые ссылки, щелкнув в устаревшая версия Microsoft Edge, запустит соответствующее приложение. Поддерживаемые ссылки, щелкаемые в других браузерах (например, Microsoft Edge Chromium, Internet Explorer и т. д.), помогут вам в просмотре.

Приложение должно определить URI для веб-сайтов, которые он будет обрабатывать. Для этого добавьте регистрацию расширения Windows.appUriHandler в файл манифеста приложения Package.appxmanifest.

Например, если адрес веб-сайта имеет значение "msn.com", вы сделаете следующую запись в манифесте приложения:

<Applications>
  <Application ... >
      ...
      <Extensions>
         <uap3:Extension Category="windows.appUriHandler">
          <uap3:AppUriHandler>
            <uap3:Host Name="msn.com" />
          </uap3:AppUriHandler>
        </uap3:Extension>
      </Extensions>
  </Application>
</Applications>

Приведенное выше объявление регистрирует приложение для обработки ссылок из указанного узла. Если веб-сайт имеет несколько адресов (например, m.example.com, www.example.com и example.com), добавьте отдельную <uap3:Host Name=... /> запись внутри <uap3:AppUriHandler> каждого адреса.

Связывание приложения и веб-сайта с JSON-файлом

Чтобы убедиться, что только ваше приложение может открывать содержимое на веб-сайте, добавьте имя семейства пакетов приложения в JSON-файл, расположенный в корневом каталоге веб-сервера или в известном каталоге в домене. Это означает, что веб-сайт дает согласие на открытие содержимого на сайте перечисленных приложений. Имя семейства пакетов можно найти в разделе "Пакеты" в конструкторе манифестов приложения.

Внимание

Файл JSON не должен содержать суффикс .json файла.

Создайте JSON-файл (без расширения файла .json) с именем windows-app-web-link и укажите имя семейства пакетов приложения. Например:

[{
  "packageFamilyName" : "Your app's package family name, e.g MyApp_9jmtgj1pbbz6e",
  "paths" : [ "*" ],
  "excludePaths" : [ "/news/*", "/blog/*" ]
 }]

Windows сделает подключение https к веб-сайту и будет искать соответствующий JSON-файл на веб-сервере.

Подстановочные знаки

Приведенный выше пример JSON-файла демонстрирует использование подстановочных знаков. Подстановочные знаки позволяют поддерживать широкий спектр ссылок с меньшим количеством строк кода. Связывание веб-приложений поддерживает два типа подстановочных знаков в JSON-файле:

Подстановочный знак Description
* Представляет любую подстроку
? Представляет один символ

Например, например, в "excludePaths" : [ "/news/*", "/blog/*" ] приведенном выше примере приложение будет поддерживать все пути, начинающиеся с адреса веб-сайта (например, msn.com), за исключением тех, в которых есть /news/ и /blog/. msn.com/weather.html будет поддерживаться, но не msn.com/news/topnews.html.

Несколько приложений

Если у вас есть два приложения, которые вы хотите связать с веб-сайтом, укажите оба имена семейств пакетов приложения в ФАЙЛЕ JSON для windows-app-web-link . Оба приложения могут поддерживаться. Пользователь будет представлен с выбором, который является ссылкой по умолчанию, если оба установлены. Если они хотят изменить ссылку по умолчанию позже, они могут изменить ее в разделе "Параметры > приложений для веб-сайтов". Разработчики также могут изменять JSON-файл в любое время и просматривать изменения до того же дня, но не более восьми дней после обновления.

[{
  "packageFamilyName": "Your apps's package family name, e.g MyApp_9jmtgj1pbbz6e",
  "paths": [ "*" ],
  "excludePaths" : [ "/news/*", "/blog/*" ]
 },
 {
  "packageFamilyName": "Your second app's package family name, for example, MyApp2_8jmtgj2pbbz6e",
  "paths": [ "/example/*", "/links/*" ]
 }]

Чтобы обеспечить лучший интерфейс для пользователей, используйте пути исключения, чтобы убедиться, что содержимое только в Интернете исключено из поддерживаемых путей в JSON-файле.

Сначала проверяются пути исключения, и если соответствующая страница будет открыта в браузере вместо указанного приложения. В приведенном выше примере "/news/*" содержит все страницы под этим путем, пока "/news*" (без косой черты "новости") включает любые пути под "news*", такие как "newslocal/", "newsinter international/" и т. д.

Перейдите к App.xaml.cs в решении Visual Studio приложения и добавьте обработку связанного содержимого в OnActivated(). В следующем примере страница, открытая в приложении, зависит от пути URI:

protected override void OnActivated(IActivatedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame == null)
    {
        ...
    }

    // Check ActivationKind, Parse URI, and Navigate user to content
    Type deepLinkPageType = typeof(MainPage);
    if (e.Kind == ActivationKind.Protocol)
    {
        var protocolArgs = (ProtocolActivatedEventArgs)e;        
        switch (protocolArgs.Uri.AbsolutePath)
        {
            case "/":
                break;
            case "/index.html":
                break;
            case "/sports.html":
                deepLinkPageType = typeof(SportsPage);
                break;
            case "/technology.html":
                deepLinkPageType = typeof(TechnologyPage);
                break;
            case "/business.html":
                deepLinkPageType = typeof(BusinessPage);
                break;
            case "/science.html":
                deepLinkPageType = typeof(SciencePage);
                break;
        }
    }

    if (rootFrame.Content == null)
    {
        // Default navigation
        rootFrame.Navigate(deepLinkPageType, e);
    }

    // Ensure the current window is active
    Window.Current.Activate();
}

Важно заменить окончательную if (rootFrame.Content == null) логику rootFrame.Navigate(deepLinkPageType, e); , как показано в приведенном выше примере.

Протестируйте его: локальное средство проверки

Вы можете проверить конфигурацию приложения и веб-сайта, выполнив средство проверки регистрации узла приложения, доступное в:

%windir%\system32\AppHostRegistrationVerifier.exe

Проверьте конфигурацию приложения и веб-сайта, выполнив это средство с помощью следующих параметров:

filepath AppHostRegistrationVerifier.exe hostname packagefamilyname filepath

  • Имя узла: ваш веб-сайт (например, microsoft.com)
  • Имя семейства пакетов (PFN): PFN вашего приложения
  • Путь к файлу: JSON-файл для локальной проверки (например, C:\SomeFolder\windows-app-web-link)

Если средство не возвращает ничего, проверка будет работать над этим файлом при отправке. Если есть код ошибки, он не будет работать.

Вы можете включить следующий раздел реестра для принудительного сопоставления путей для приложений, загруженных на стороне, в рамках локальной проверки:

HKCU\Software\Classes\LocalSettings\Software\Microsoft\Windows\CurrentVersion\ AppModel\SystemAppData\YourApp\AppUriHandlers

Имя ключа: значение: ForceValidation1

Протестируйте его: веб-проверка

Закройте приложение, чтобы убедиться, что приложение активируется при нажатии ссылки. Затем скопируйте адрес одного из поддерживаемых путей на веб-сайте. Например, если адрес веб-сайта — "msn.com", а один из путей поддержки — path1, вы будете использовать http://msn.com/path1

Убедитесь, что приложение закрыто. Нажмите клавишу Windows + R , чтобы открыть диалоговое окно "Запуск " и вставьте ссылку в окне. Приложение должно запускаться вместо веб-браузера.

Кроме того, вы можете протестировать приложение, запустив его из другого приложения с помощью API LaunchUriAsync . Этот API можно также использовать для тестирования на телефонах.

Если вы хотите следовать логике активации протокола, установите точку останова в обработчике событий OnActivated .

Советы AppUriHandlers:

  • Не забудьте указать только ссылки, которые может обрабатывать ваше приложение.
  • Список всех узлов, которые вы будете поддерживать. Обратите внимание, что www.example.com и example.com являются разными узлами.
  • Пользователи могут выбрать, какое приложение они предпочитают обрабатывать веб-сайты в параметрах.
  • Json-файл должен быть отправлен на https-сервер.
  • Если вам нужно изменить пути, которые вы хотите поддерживать, можно повторно опубликовать JSON-файл без повторной публикации приложения. Пользователи увидят изменения в 1–8 дней.
  • Все загруженные неопубликованные приложения с AppUriHandlers будут иметь проверенные ссылки для узла при установке. Для тестирования функции не требуется отправить JSON-файл.
  • Эта функция работает всякий раз, когда ваше приложение является приложением UWP, запущенным с помощью LaunchUriAsync или классического приложения Windows, запущенного с помощью ShellExecuteEx. Если URL-адрес соответствует зарегистрированной обработчику URI приложения, приложение будет запущено вместо браузера.

См. также

Пример проекта windows.protocolregistrationHandle URIActivation Association Launch sample to-App example to-App example how to use the LaunchUriAsync() API.