App Link é um mecanismo do Android (Android 6.0+) que abre automaticamente links da web no aplicativo instalado, ignorando a caixa de diálogo de escolha. O termo foi introduzido pelo Google em 2015 junto com o Android 6.0 Marshmallow. De acordo com Android Developers, o App Link usa Digital Asset Links — verificação criptográfica através de um arquivo no servidor, confirmando que o domínio pertence ao desenvolvedor do aplicativo.
Pontos principais
App Link (Android App Link) é um link HTTPS padrão que, ao ser clicado em um dispositivo Android, abre automaticamente o aplicativo instalado sem mostrar a caixa de diálogo padrão de escolha entre navegador e aplicativo. O Google introduziu o App Link no Android 6.0 (API 23) como solução para o problema da “caixa de diálogo de escolha”, que reduzia a conversão de deep link devido ao clique extra e confusão do usuário.
A inovação chave: verificação. O Android verifica se o domínio realmente pertence ao desenvolvedor do aplicativo através da API Digital Asset Links. O Google Play Store verifica o App Link na publicação e pode rejeitar uma atualização se a verificação falhar. Isso torna o App Link mais seguro que o Custom URL Scheme: nenhum outro aplicativo pode interceptar um link para seu domínio.
Digital Asset Links é um protocolo aberto que o Google usa não apenas para App Link, mas também para vincular sites a aplicativos nos resultados de busca, Google Assistant e Smart Lock for Passwords. O protocolo é baseado em verificação criptográfica: no assetlinks.json é especificada a impressão digital SHA256 do certificado de assinatura do aplicativo, o que elimina a falsificação.
O processo de funcionamento do App Link consiste em três etapas: verificação do Digital Asset Links, processamento através do Intent Filter e redirecionamento automático. Cada etapa é obrigatória. Se a verificação falhar, o Android mostra uma caixa de diálogo de escolha — esse deep link funciona normalmente, mas sem a vantagem da transição automática.
Asset Links é um arquivo JSON colocado no servidor em https://domain/.well-known/assetlinks.json. O arquivo contém uma matriz de objetos com campos: relation (matriz de strings descrevendo o tipo de relação), target (objeto com namespace e package_name do aplicativo, além de sha256_cert_fingerprints — matriz de impressões digitais SHA256 do certificado de assinatura).
// assetlinks.json — configuração mínima do App Link
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
]
}
}]
A impressão digital SHA256 é obtida do certificado usado para assinar o aplicativo. Para compilações de depuração, usa-se o certificado de depuração padrão do Android; para compilações de lançamento, o certificado do Google Play Console ou o seu próprio. Importante: ao alterar o certificado de assinatura (por exemplo, ao migrar para App Signing by Google Play), é necessário atualizar o assetlinks.json no servidor, caso contrário o App Link deixará de funcionar.
O Android verifica o App Link no primeiro clique em um link. O sistema baixa o assetlinks.json do servidor, compara o package_name e a impressão digital SHA256 com o certificado do aplicativo instalado. Se os dados coincidirem, o Android marca o Intent Filter como verificado, e todos os links subsequentes para este domínio abrem automaticamente, sem diálogo.
// AndroidManifest.xml — Intent Filter para App Link
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="example.com"
android:pathPrefix="/product" />
</intent-filter>
</activity>
autoVerify="true" é um atributo obrigatório que instrui o Android a verificar o assetlinks.json. Sem este atributo, o Intent Filter não será verificado e o App Link não será ativado. O Android suporta vários Intent Filters em uma única Activity — para diferentes hosts. O sistema verifica cada host separadamente. A verificação é realizada de forma assíncrona e pode levar até 20 segundos no primeiro clique.
Após verificação bem-sucedida, o Android abre automaticamente o aplicativo ao clicar em qualquer link que corresponda ao Intent Filter verificado. O usuário não vê uma caixa de diálogo de escolha — o aplicativo abre instantaneamente. Se o aplicativo não estiver instalado, o link abre no navegador (como uma página web normal). Esta é a experiência de usuário ideal: transição perfeita sem ações desnecessárias.
Importante: o redirecionamento automático funciona apenas para o esquema https. O App Link não suporta http (protocolo não seguro). Se um usuário abrir manualmente um link http (por exemplo, de SMS), o Android não realiza a verificação e mostra uma caixa de diálogo de escolha. Recomenda-se usar https para todos os links que levam ao aplicativo e configurar o redirecionamento HTTP para HTTPS no servidor.
App Link é a evolução do Deep Link no Android, não uma substituição. A diferença entre eles é fundamental. Deep Link comum (Custom URL Scheme) funciona através de um Intent Filter com um esquema personalizado (myapp://) e sem autoVerify. O Android não verifica se o aplicativo está realmente associado a este esquema — qualquer aplicativo pode registrar myapp:// e interceptar links.
App Link resolve três problemas do Deep Link. Primeiro: segurança — a verificação através do Digital Asset Links impede a interceptação de links. Segundo: experiência do usuário — a ausência da caixa de diálogo de escolha aumenta a conversão para a ação alvo em 20–40%. Terceiro: indexação — o Google indexa URLs https do App Link e pode mostrá-los nos resultados de busca como links para conteúdo dentro do aplicativo.
Compatibilidade: App Link funciona no Android 6.0+ (99% dos dispositivos). Para Android 5.x (Lollipop), usa-se Deep Link comum com caixa de diálogo de escolha. Portanto, recomenda-se suportar ambos os mecanismos: App Link para dispositivos modernos e Custom URL Scheme como fallback para versões antigas. Um Intent Filter com autoVerify="true" não quebra a compatibilidade reversa — no Android < 6, o atributo é ignorado.
| Característica | Deep Link | App Link |
|---|---|---|
| Esquema | Personalizado (myapp://) | HTTPS (https://domain) |
| Verificação | Não | assetlinks.json |
| Caixa de diálogo | Mostrada | Redirecionamento automático |
| Versão Android | API 1+ | API 23+ (6.0+) |
| Indexação Google | Não | Sim (URL https) |
A configuração do App Link requer três passos: configuração do Intent Filter no manifesto, colocação do assetlinks.json no servidor e verificação da verificação. O primeiro passo é adicionar um Intent Filter com android:autoVerify="true" no AndroidManifest.xml. É importante especificar o esquema https, o host e os caminhos que o aplicativo deve manipular. Os caminhos podem conter curingas (*) para subpastas.
O segundo passo é criar o assetlinks.json. O arquivo pode ser gerado através do Android Studio (Tools → App Links Assistant). O assistente também ajuda com depuração e testes. O arquivo é colocado no servidor em /.well-known/assetlinks.json. O servidor deve retornar Content-Type: application/json e ser acessível via HTTPS sem redirecionamentos. O Google Play Console também mostra o status de verificação do App Link na seção Publishing.
Testes — o terceiro passo. Use adb para verificar: o comando adb shell am start -W -a android.intent.action.VIEW -d “https://example.com/product/42” abre o aplicativo. Se o navegador abrir em vez do aplicativo, verifique assetlinks.json e autoVerify. O Android Studio App Links Assistant contém um testador integrado: ele mostra o status de verificação para cada domínio e caminho. Para testes automatizados, use Android Testing Library com Intent Matcher.
Android 12 (API 31) introduziu mudanças no tratamento do App Link. Uma nova verificação específica por domínio foi adicionada: o sistema verifica cada link individualmente, não todo o Intent Filter. Isso melhora a segurança, mas requer atualização do arquivo assetlinks.json ao adicionar novos caminhos. O Android 12 também introduziu o Android App Links Assistant incluído com ADB — comandos para gerenciar a verificação via shell.
Múltiplos domínios é um cenário típico para produção. O aplicativo pode manipular links de example.com, m.example.com e example.org. Cada domínio requer um assetlinks.json separado no servidor correspondente. No manifesto, vários Intent Filters são adicionados — um por domínio. Todos os domínios devem ser acessíveis via HTTPS e passar pela verificação independentemente.
App Link e Jetpack Navigation é a forma recomendada de lidar com App Link em aplicativos Android modernos. O Jetpack Navigation suporta deep links declarativos no nav_graph.xml ou via NavDeepLinkRequest. Isso simplifica a navegação: o desenvolvedor descreve qual tela abre para uma determinada URL, e o componente Navigation manipula o Intent e restaura a pilha de navegação por si só. O Google recomenda usar Jetpack Navigation para App Link.
// Processamento de App Link via Jetpack Navigation
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent) {
intent.data?.let { uri ->
navController.handleDeepLink(NavDeepLinkRequest
.Builder
.fromUri(uri)
.build()
)
}
}
}
Google Play Store verifica o App Link na publicação. Se o manifesto contiver um Intent Filter com autoVerify mas o assetlinks.json estiver indisponível ou incorreto, o Google Play pode rejeitar a atualização com um aviso. No console do desenvolvedor (Policy and Programs → App Links), o status de verificação de cada domínio é exibido. Antes de publicar, sempre verifique o status — corrigi-lo após a rejeição da atualização atrasa o lançamento.
Perguntas frequentes
App Link é um Deep Link com verificação através do Digital Asset Links. As principais diferenças: App Link usa um esquema https em vez de um personalizado, não mostra uma caixa de diálogo de escolha e é indexado pelo Google. Um Deep Link comum funciona em todas as versões do Android, mas requer seleção manual do aplicativo.
O arquivo é colocado na raiz do servidor HTTPS em /.well-known/assetlinks.json. O servidor deve retornar Content-Type: application/json. O arquivo deve ser atualizado ao alterar o certificado de assinatura ou adicionar novos domínios.
Principais razões: falta android:autoVerify="true" no Intent Filter, assetlinks.json indisponível via HTTPS, impressão digital SHA256 incorreta, certificado de assinatura diferente (debug vs release). Verifique o status de verificação via adb shell dumpsync domain_verification.
Não — App Link requer um servidor HTTPS com assetlinks.json acessível. Se você não tem um domínio, use Firebase Hosting ou GitHub Pages para hospedar o arquivo. Alternativa: Custom URL Scheme (sem verificação) ou Firebase Dynamic Links.
Não — App Link é suportado no Android 6.0 (API 23) e superior. No Android 5, Intent Filter com android:autoVerify="true" ignora o atributo e funciona como um Deep Link comum com caixa de diálogo de escolha. Recomenda-se suportar ambos os mecanismos para compatibilidade reversa.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também