Os Links do app são links diretos que usam o esquema HTTP ou HTTPS e são verificados pelo Android como associados ao seu site. Para se registrar e processar App Links, siga estas etapas:
- Adicione um ou mais filtros de intent ao manifesto do app que especifiquem o domínio ou os URLs do seu site.
- Adicione o
autoVerify="true"attribute
aos elementos do filtro de intent. Isso sinaliza ao sistema que ele deve tentar verificar o esquema e os domínios do host em relação à configuraçãoassetlinks.json
do seu site. - Declare associações de site.
Confira a seguir um exemplo de declaração de link de app com esquemas e hosts, além de autoVerify="true
":
<activity
android:name=".MainActivity"
android:exported="true"
...>
<!-- Make sure you explicitly set android:autoVerify to "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" />
<!-- If a user clicks on a link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<!-- Do not include other schemes, as this will prevent verification. -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="www.example.com" />
<data android:host="*.example.com" />
</intent-filter>
</activity>
Pontos principais sobre o código
- AutoVerify: o atributo
android:autoVerify="true
" é obrigatório para Links do App. Ele indica ao sistema que ele deve tentar verificar a associação entre o app e os esquemas e domínios especificados nas tags<data>
. Recomendamos adicionarautoVerify="true
" a cada filtro de intent que você quer verificar. - Elementos de dados: cada filtro de intent de App Links precisa incluir um ou mais elementos
<data>
que especificam os esquemas e formatos de host correspondentes ao seu domínio do site verificável. - Esquemas: o filtro de intent precisa incluir elementos
<data>
para os esquemashttp
ehttps
. Hosts: opcionalmente, é possível adicionar elementos
<data>
para corresponder a um ou mais hosts. Use um caractere curinga (*
) para corresponder a vários subdomínios (como*.example.com
). O sistema vai tentar verificar cada host com seu arquivo assetlinks.json no seu site. Qualquer roteamento no nível do caminho precisa ser processado pelo arquivo assetlinks.json (consulte a seção de práticas recomendadas abaixo).Vários hosts: se você declarar vários domínios de host, o sistema (no Android 12 ou mais recente) tentará verificar cada um deles. Se algum host for verificado, o app se tornará o gerenciador padrão de links desse host. No Android 11 e em versões anteriores, a verificação falha se um host não puder ser verificado.
Vários filtros de intent: é importante criar filtros separados quando a intenção é declarar URLs exclusivos (como uma combinação específica de esquema e host), porque vários elementos
<data>
no mesmo filtro de intent são mesclados para considerar todas as variações dos atributos combinados.
Considerações sobre regras de filtro de manifesto
Se você estiver configurando filtros para uso com links dinâmicos de apps no Android 15 e versões mais recentes, é importante lembrar que as regras dinâmicas declaradas no arquivo assetlinks.json do lado do servidor não podem expandir o escopo das regras de URL que você declara de forma estática no manifesto do app.
Por isso, recomendamos usar esta abordagem:
- No manifesto do app, defina o escopo mais amplo possível, como declarando apenas esquema e domínio.
- Confie nas regras do lado do servidor assetlinks.json para mais refinamentos, como roteamento no nível do caminho.
Com essa configuração ideal, você poderá adicionar dinamicamente novos caminhos de App Links
no arquivo assetlinks.json
conforme necessário, sabendo que eles se encaixarão no
amplo escopo definido no manifesto do app.
Oferecer suporte a links de app para vários hosts
O sistema precisa verificar o host especificado nos elementos de dados dos filtros de intent de URL do app com relação aos arquivos Digital Asset Links hospedados nos respectivos domínios da Web nesse filtro de intent. Se a verificação falhar, o sistema usará o próprio comportamento padrão para resolver o intent, conforme descrito em Criar links diretos para conteúdo de app. No entanto, o app ainda pode ser verificado como gerenciador padrão para qualquer um dos padrões de URL definidos nos outros filtros de intent do app.
Por exemplo, um app com os seguintes filtros de intent passaria na verificação
apenas para https://www.example.com
se um arquivo assetlinks.json
fosse encontrado em
https://www.example.com/.well-known/assetlinks.json
, mas não em
https://www.example.net/.well-known/assetlinks.json
:
<application>
<activity android:name=”MainActivity”>
<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="http" />
<data android:scheme="https" />
<data android:host="www.example.com" />
</intent-filter>
</activity>
<activity android:name="SecondActivity">
<intent-filter>
<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" />
<data android:host="www.example.net" />
</intent-filter>
</activity>
</application>
Oferecer compatibilidade com links de app para vários subdomínios
O protocolo Digital Asset Links trata subdomínios nos seus filtros de intent como hosts exclusivos e separados. Portanto, se o filtro de intent listar vários hosts com
subdomínios diferentes, será necessário publicar um assetlinks.json
válido em cada domínio.
Por exemplo, o filtro de intent a seguir inclui www.example.com
e
mobile.example.com
como hosts de URL de intent aceitos. Portanto, um assetlinks.json
válido precisa ser publicado em https://www.example.com/.well-known/assetlinks.json
e https://mobile.example.com/.well-known/assetlinks.json
.
<application>
<activity android:name="MainActivity">
<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" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<data android:host="mobile.example.com" />
</intent-filter>
</activity>
</application>
Como alternativa, se você declarar o nome do host com um caractere curinga (como
*.example.com
), será necessário publicar o arquivo assetlinks.json
no nome do host raiz (example.com
). Por exemplo, um app com o seguinte filtro de intent
passará na verificação de qualquer subnome de example.com
(como
foo.example.com
), desde que o arquivo assetlinks.json
seja publicado em
https://example.com/.well-known/assetlinks.json
:
<application>
<activity android:name="MainActivity">
<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" />
<data android:host="*.example.com" />
</intent-filter>
</activity>
</application>
Verificar se há vários apps associados ao mesmo domínio
Se você publicar vários apps, cada um associado ao mesmo domínio, todos eles poderão ser verificados. No entanto, se os apps puderem resolver exatamente o mesmo host de domínio e caminho, assim como ocorre com as versões Lite e completas de um app, apenas o app instalado mais recentemente poderá resolver intents da Web para o domínio.
Nesse caso, verifique se há apps conflitantes no dispositivo do usuário,
contanto que você tenha a visibilidade de pacotes necessária. Em seguida, no app,
mostre uma caixa de diálogo de seletor personalizada que contenha os resultados da chamada de
queryIntentActivities
. O usuário pode selecionar o app preferido na
lista de apps correspondentes que aparecem na caixa de diálogo.