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:
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:
- 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.
- 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.
- 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:
- 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.
- 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çõesCategories
– 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 declararhttp
e/ouhttps
. 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
– OautoVerify
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.
Criando o arquivo de link de ativos digitais
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.
Testando App-Links
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:
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"
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 aplicativoStatus
– Esse é o status atual de manipulação de link para o aplicativo. Um valor de sempre significa que o aplicativoandroid: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.