Habilitar aplicativos para sites usando manipuladores de URI de Aplicativos

O Apps for Websites associa seu aplicativo a um site para que, quando alguém abrir um link para seu site, seu aplicativo seja iniciado em vez de abrir o navegador. Se o aplicativo não estiver instalado, o site será aberto no navegador normalmente. Os usuários podem confiar nessa experiência porque apenas proprietários de conteúdo verificados podem se registrar para um link. Os usuários poderão verificar todos os seus links registrados da Web para o aplicativo acessando Configurações > Aplicativos > Aplicativos para sites.

Para habilitar a vinculação da Web para o aplicativo, você precisará:

  • Identifique os URIs que seu aplicativo manipulará no arquivo de manifesto
  • Um arquivo JSON que define a associação entre seu aplicativo e seu site. com o nome da família de pacotes do aplicativo na mesma raiz do host que a declaração de manifesto do aplicativo.
  • Manipule a ativação no aplicativo.

Observação

A partir da atualização do Windows 10 Creators, os links com suporte clicados no Microsoft Edge Legacy iniciarão o aplicativo correspondente. Os links suportados clicados em outros navegadores (por exemplo, Microsoft Edge Chromium, Internet Explorer etc.) manterão você na experiência de navegação.

Seu aplicativo precisa identificar os URIs dos sites que ele manipulará. Para fazer isso, adicione o registro de extensão Windows.appUriHandler ao arquivo de manifesto do aplicativo Package.appxmanifest.

Por exemplo, se o endereço do seu site for "msn.com", você fará a seguinte entrada no manifesto do seu aplicativo:

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

A declaração acima registra seu aplicativo para lidar com links do host especificado. Se o seu site tiver vários endereços (por exemplo: m.example.com, www.example.com e example.com), adicione uma entrada separada <uap3:Host Name=... /> dentro do <uap3:AppUriHandler> endereço para cada.

Associar seu aplicativo e site a um arquivo JSON

Para garantir que apenas seu aplicativo possa abrir conteúdo em seu site, inclua o nome da família de pacotes do aplicativo em um arquivo JSON localizado na raiz do servidor Web ou no diretório conhecido no domínio. Isso significa que seu site dá consentimento para que os aplicativos listados abram conteúdo em seu site. Você pode encontrar o nome da família de pacotes na seção Pacotes no designer de manifesto do aplicativo.

Importante

O arquivo JSON não deve ter um sufixo de arquivo .json.

Crie um arquivo JSON (sem a extensão de arquivo .json) chamado windows-app-web-link e forneça o nome da família de pacotes do aplicativo. Por exemplo:

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

O Windows fará uma conexão https com seu site e procurará o arquivo JSON correspondente em seu servidor web.

Curingas

O exemplo de arquivo JSON acima demonstra o uso de curingas. Os curingas permitem que você ofereça suporte a uma ampla variedade de links com menos linhas de código. A vinculação da Web para o aplicativo dá suporte a dois tipos de curingas no arquivo JSON:

Curinga Descrição
* Representa qualquer subcadeia de caracteres
? Representa um único caractere

Por exemplo, dado "excludePaths" : [ "/news/*", "/blog/*" ] no exemplo acima, seu aplicativo dará suporte a todos os caminhos que começam com o endereço do seu site (por exemplo, msn.com), exceto aqueles em /news/ e /blog/. msn.com/weather.html serão suportados, mas não msn.com/news/topnews.html.

Vários aplicativos

Se você tiver dois aplicativos que gostaria de vincular ao seu site, liste os dois nomes de família do pacote de aplicativos no arquivo JSON windows-app-web-link . Ambos os aplicativos podem ser suportados. O usuário poderá escolher qual é o link padrão se ambos estiverem instalados. Se eles quiserem alterar o link padrão posteriormente, eles podem alterá-lo em Configurações > Aplicativos para sites. Os desenvolvedores também podem alterar o arquivo JSON a qualquer momento e ver a alteração no mesmo dia, mas no máximo oito dias após a atualização.

[{
  "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/*" ]
 }]

Para fornecer a melhor experiência para seus usuários, use caminhos de exclusão para garantir que o conteúdo somente online seja excluído dos caminhos com suporte em seu arquivo JSON.

Os caminhos de exclusão são verificados primeiro e, se houver uma correspondência, a página correspondente será aberta com o navegador em vez do aplicativo designado. No exemplo acima, '/news/*' inclui todas as páginas nesse caminho, enquanto '/news*' (sem barras 'news') inclui todos os caminhos em 'news*', como 'newslocal/', 'newsinternational/' e assim por diante.

Navegue até App.xaml.cs na solução do Visual Studio do aplicativo e, em OnActivated(), adicione o tratamento para o conteúdo vinculado. No exemplo a seguir, a página aberta no aplicativo depende do caminho do 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();
}

Importante Certifique-se de substituir a lógica final if (rootFrame.Content == null) por rootFrame.Navigate(deepLinkPageType, e); como mostrado no exemplo acima.

Teste: Ferramenta de validação local

Você pode testar a configuração do seu aplicativo e site executando a ferramenta Verificador de registro de host de aplicativo, que está disponível em:

%windir%\system32\AppHostRegistrationVerifier.exe

Teste a configuração do seu aplicativo e site executando esta ferramenta com os seguintes parâmetros:

AppHostRegistrationVerifier.exe nome do host packagefamilyname filepath

  • Nome do host: seu site (por exemplo, microsoft.com)
  • PFN (Nome da Família de Pacotes): o PFN do seu aplicativo
  • Caminho do arquivo: o arquivo JSON para validação local (por exemplo, C:\SomeFolder\windows-app-web-link)

Se a ferramenta não retornar nada, a validação funcionará nesse arquivo quando carregado. Se houver um código de erro, ele não funcionará.

Você pode habilitar a seguinte chave do Registro para forçar a correspondência de caminho para aplicativos de sideload como parte da validação local:

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

Nome da chave: ForceValidation Valor: 1

Teste: validação da Web

Feche seu aplicativo para verificar se o aplicativo está ativado quando você clica em um link. Em seguida, copie o endereço de um dos caminhos suportados em seu site. Por exemplo, se o endereço do seu site for "msn.com" e um dos caminhos de suporte for "path1", você usaria http://msn.com/path1

Verifique se o aplicativo está fechado. Pressione a tecla Windows + R para abrir a caixa de diálogo Executar e cole o link na janela. Seu aplicativo deve ser iniciado em vez do navegador da Web.

Além disso, você pode testar seu aplicativo iniciando-o de outro aplicativo usando a API LaunchUriAsync . Você também pode usar essa API para testar em telefones.

Se você quiser seguir a lógica de ativação do protocolo, defina um ponto de interrupção no manipulador de eventos OnActivated .

Dicas do AppUriHandlers:

  • Certifique-se de especificar apenas links que seu aplicativo pode manipular.
  • Liste todos os hosts aos quais você dará suporte. Observe que www.example.com e example.com são hosts diferentes.
  • Os usuários podem escolher qual aplicativo preferem lidar com sites em Configurações.
  • Seu arquivo JSON deve ser carregado em um servidor https.
  • Se você precisar alterar os caminhos aos quais deseja dar suporte, poderá republicar o arquivo JSON sem republicar o aplicativo. Os usuários verão as alterações em 1 a 8 dias.
  • Todos os aplicativos de sideload com AppUriHandlers terão links validados para o host na instalação. Você não precisa ter um arquivo JSON carregado para testar o recurso.
  • Esse recurso funciona sempre que seu aplicativo é um aplicativo UWP iniciado com LaunchUriAsync ou um aplicativo da área de trabalho do Windows iniciado com ShellExecuteEx. Se a URL corresponder a um manipulador de URI do aplicativo registrado, o aplicativo será iniciado em vez do navegador.

Confira também

Exemplo de Web-to-App projetowindows.protocol registrationHandle URI ActivationAssociation Launching sample ilustra como usar a API LaunchUriAsync().