App-Linking no Android

Este guia discutirá como o Android 6.0 dá suporte à vinculação de aplicativos, uma técnica que permite que aplicativos móveis respondam às URLs em sites. Ele discutirá o que é a vinculação de aplicativos, como implementar a vinculação de aplicativos em um aplicativo Android 6.0 e como configurar um site para conceder permissões ao aplicativo móvel para um domínio.

Visão geral da vinculação de aplicativos

Os aplicativos móveis não vivem mais em um silo . Em muitos casos, eles são componentes importantes de seus negócios, juntamente com seu site. É desejável que as empresas conectem perfeitamente sua presença na Web e aplicativos móveis, com links em um site iniciando aplicativos móveis e exibindo conteúdo relevante no aplicativo móvel. A vinculação de aplicativos (também conhecida como vinculação profunda) é uma técnica que permite que um dispositivo móvel responda a um URI e inicie um aplicativo móvel que corresponda a esse URI.

O Android lida com a vinculação de aplicativos por meio do sistema de intenção – quando o usuário clica em um link em um navegador móvel, o navegador móvel expedirá uma intenção que o Android delegará a um aplicativo registrado. Por exemplo, clicar em um link em um site de culinária abriria um aplicativo móvel associado a esse site e exibiria uma receita específica para o usuário. Se houver mais de um aplicativo registrado para lidar com essa intenção, o Android gerará o que é conhecido como uma caixa de diálogo de desambiguação que perguntará a um usuário qual aplicativo selecionar o aplicativo que deve lidar com a intenção, por exemplo:

Captura de tela de exemplo de uma caixa de diálogo de desambiguação

O Android 6.0 melhora isso usando o tratamento automático de link. É possível que o Android registre automaticamente um aplicativo como o manipulador padrão para um URI – o aplicativo será iniciado automaticamente e navegará diretamente para a Atividade relevante. Como o Android 6.0 decide manipular um clique de URI depende dos seguintes critérios:

  1. Um aplicativo existente já está associado ao URI – o usuário pode já ter associado um aplicativo existente a um URI. Nesse caso, o Android continuará a usar esse aplicativo.
  2. Nenhum aplicativo existente está associado ao URI, mas um aplicativo de suporte está instalado – nesse cenário, o usuário não especificou um aplicativo existente, portanto, o Android usará o aplicativo de suporte instalado para lidar com a solicitação.
  3. Nenhum aplicativo existente está associado ao URI, mas muitos aplicativos de suporte estão instalados – como há vários aplicativos que dão suporte ao URI, a caixa de diálogo de desambiguação será exibida e o usuário deve selecionar qual aplicativo manipulará o URI.

Se o usuário não tiver aplicativos instalados que dão suporte ao URI e um for instalado posteriormente, o Android definirá esse aplicativo como o manipulador padrão para o URI depois de verificar a associação com o site associado ao URI.

Este guia discutirá como configurar um aplicativo Android 6.0 e como criar e publicar o arquivo Links de Ativo Digital para dar suporte à vinculação de aplicativos no Android 6.0.

Requisitos

Este guia requer o Xamarin.Android 6.1 e um aplicativo direcionado ao Android 6.0 (nível de API 23) ou superior.

A vinculação de aplicativos é possível em versões anteriores do Android usando o pacote NuGet rivets do repositório de componentes do Xamarin. O pacote Rivets não é compatível com a vinculação de aplicativos no Android 6.0; ele não dá suporte à vinculação de aplicativo Android 6.0.

Configurando App-Linking no Android 6.0

A configuração de links de aplicativo no Android 6.0 envolve duas etapas principais:

  1. Adicionando um ou mais filtros de intenção para o URI do site – os filtros de intenção orientam o Android sobre como lidar com um clique de URL em um navegador móvel.
  2. Publicando um arquivo JSON de Links de Ativo Digital no site – este é um arquivo que é carregado em um site e é usado pelo Android para verificar a relação entre o aplicativo móvel e o domínio do site. Sem isso, o Android não pode instalar o aplicativo como o identificador padrão do URI; o usuário deve fazer isso manualmente.

Configurando o filtro de intenção

É necessário configurar um filtro de intenção que mapeia um URI (ou um possível conjunto de URIs) de um site para uma atividade em um aplicativo Android. No Xamarin.Android, essa relação é estabelecida adornando uma atividade com o IntentFilterAttribute. O filtro de intenção deve declarar as seguintes informações:

  • Intent.ActionView – Isso registrará o filtro de intenção para responder às solicitações para exibir informações
  • Categories – O filtro de intenção deve registrar Intent.CategoryBrowsable e Intent.CategoryDefault para ser capaz de lidar corretamente com o URI da Web.
  • DataScheme – O filtro de intenção deve declarar http e/ou https. Esses são os dois únicos esquemas válidos.
  • DataHost – Esse é o domínio do qual os URIs serão originados.
  • DataPathPrefix – Esse é um caminho opcional para recursos no site.
  • AutoVerify – O autoVerify atributo informa ao Android para verificar a relação entre o aplicativo e o site. Isso será discutido mais abaixo.

O exemplo a seguir mostra como usar o IntentFilterAttribute para manipular links de https://www.recipe-app.com/recipes e para http://www.recipe-app.com/recipes:

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

O Android verificará cada host identificado pelos filtros de intenção em relação ao Arquivo de Ativos Digitais no site antes de registrar o aplicativo como o manipulador padrão para um URI. Todos os filtros de intenção devem passar pela verificação antes que o Android possa estabelecer o aplicativo como o manipulador padrão.

A vinculação de aplicativo do Android 6.0 requer que o Android verifique a associação entre o aplicativo e o site antes de definir o aplicativo como o manipulador padrão para o URI. Essa verificação ocorrerá quando o aplicativo for instalado pela primeira vez. O arquivo Links de Ativos Digitais é um arquivo JSON hospedado pelos webdomain(s) relevantes.

Observação

O android:autoVerify atributo deve ser definido pelo filtro de intenção – caso contrário, o Android não executará a verificação.

O arquivo é colocado pelo webmaster do domínio no local https://domain/.well-known/assetlinks.json.

O Arquivo de Ativo Digital contém os metadados necessários para o Android verificar a associação. Um arquivo assetlinks.json tem os seguintes pares chave-valor:

  • namespace – o namespace do aplicativo Android.
  • package_name – o nome do pacote do aplicativo Android (declarado no manifesto do aplicativo).
  • sha256_cert_fingerprints – as impressões digitais SHA256 do aplicativo assinado. Consulte o guia Localizando a assinatura do repositório de chaves para obter mais informações sobre como obter a impressão digital SHA256 de um aplicativo.

O snippet a seguir é um exemplo de assetlinks.json com um único aplicativo listado:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.example",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

É possível registrar mais de uma impressão digital SHA256 para dar suporte a diferentes versões ou builds do aplicativo. Este próximo arquivo assetlinks.json é um exemplo de registro de vários aplicativos:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.puppies.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   },
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.monkeys.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

O site do Google Digital Asset Links tem uma ferramenta online que pode ajudar a criar e testar o arquivo ativos digitais.

Depois de implementar links de aplicativo, as várias partes devem ser testadas para garantir que funcionem conforme o esperado.

É possível confirmar que o arquivo Ativos Digitais está formatado e hospedado corretamente usando a API de Links de Ativo Digital do Google, conforme mostrado neste exemplo:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

Há dois testes que podem ser executados para garantir que os filtros de intenção tenham sido configurados corretamente e que o aplicativo seja definido como o manipulador padrão para um URI:

  1. O Arquivo de Ativo Digital está hospedado corretamente, conforme descrito acima. O primeiro teste enviará uma intenção que o Android deve redirecionar para o aplicativo móvel. O aplicativo Android deve iniciar e exibir a Atividade registrada para a URL. Em um tipo de prompt de comando:

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. Exiba as políticas de manipulação de link existentes para os aplicativos instalados em um determinado dispositivo. O comando a seguir despejará uma listagem de políticas de link para cada usuário no dispositivo com as informações a seguir. No prompt de comando, digite o comando a seguir:

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package – O nome do pacote do aplicativo.
    • Domain – Os domínios (separados por espaços) cujos links da Web serão tratados pelo aplicativo
    • Status– Esse é o status atual de manipulação de link para o aplicativo. Um valor de sempre significa que o aplicativo android:autoVerify=true declarou e passou pela verificação do sistema. Ele é seguido por um número hexadecimal que representa o registro da preferência do sistema Android.

    Por exemplo:

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

Resumo

Este guia discutiu como a vinculação de aplicativos funciona no Android 6.0. Em seguida, ele abordou como configurar um aplicativo Android 6.0 para dar suporte e responder a links de aplicativo. Ele também discutiu como testar a vinculação de aplicativos em um aplicativo Android.