Criar links diretos para conteúdo de app

Quando um link clicado ou uma solicitação programática invoca uma intent de URI da Web, o sistema Android tenta cada uma das ações a seguir em ordem sequencial, até que a solicitação seja atendida:

  1. Abrir o app preferencial do usuário para processar o URI, se houver um app designado.
  2. Abrir o único app disponível para processar o URI.
  3. Permitir que o usuário selecione um app em uma caixa de diálogo.

Siga as etapas abaixo para criar e testar links para seu conteúdo. Você também pode usar o App Links Assistant no Android Studio para adicionar Links do app Android

Observação : a partir do Android 12 (nível 31 da API), uma versão intenção da Web se resolve em uma atividade no seu aplicativo somente se ele for aprovado para o domínio específico contido naquela intent da Web. Se o app não for aprovado para o domínio, a intent da Web será resolvida no app de navegação padrão do usuário.

Adicionar filtros de intent para links recebidos

Para criar um link para o conteúdo do app, adicione um filtro de intent que contenha estes elementos e valores de atributo no manifesto:

<action>
Especifique a ação de intent ACTION_VIEW para que o filtro de intent seja acessado a partir da Pesquisa Google.
<data>
Adicionar um ou mais <data> tags, cada uma representando um formato de URI que se refere à atividade. No mínimo, a A tag <data> precisa incluir a android:scheme .

É possível adicionar outros atributos para refinar ainda mais o tipo de URI aceito pela atividade. Para exemplo, você pode ter várias atividades que aceitam URIs similares, mas que diferem simplesmente com base no nome do caminho. Nesse caso, use o método Atributo android:path ou as variantes pathPattern ou pathPrefix para diferenciar quais atividade que o sistema deve abrir para diferentes caminhos de URI.

<category>
Inclua o BROWSABLE categoria. Ele é necessário para que o filtro de intent seja acessível em uma Web navegador. Sem ela, não é possível clicar no link de um navegador para seu app.

Inclua também a categoria DEFAULT. Ela permite que o app responda a intents implícitas. Sem isso, a atividade só poderá ser iniciada se a intent especificar o nome do componente do app.

O snippet XML a seguir mostra como especificar um filtro de intent no manifesto para links diretos. Os URIs “example://gizmos” e “http://www.example.com/gizmos” resolvem para essa atividade.

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

A única diferença entre os dois filtros de intent é o elemento <data>. Embora seja possível incluir vários elementos <data> no mesmo filtro, é importante criar filtros separados quando sua intenção é declarar URLs exclusivos (como uma combinação específica de scheme e host), porque vários elementos <data> no mesmo filtro de intent são mesclados para considerar todas as variações dos atributos combinados. Por exemplo, considere o seguinte:

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

Pode parecer que isso oferece suporte apenas a https://www.example.com e app://open.my.app. No entanto, ele é compatível também com app://www.example.com e https://open.my.app.

Cuidado: se várias atividades contiverem filtros de intent que resolvem para a mesma o Link do app Android verificado, não haverá garantia de qual atividade lida com o link.

Depois de adicionar filtros de intent com URIs para conteúdo de atividade ao manifesto do seu app, o Android poderá rotear qualquer Intent que tenha URIs correspondentes para seu app durante a execução.

Para saber mais sobre como definir filtros de intents, consulte Como permitir que outros apps iniciem sua atividade.

Ler dados de intents recebidas

Depois que o sistema iniciar sua atividade usando um filtro de intents, será possível Use os dados fornecidos pelo Intent para determinar o que você precisa renderizar. Chame os métodos getData() e getAction() para recuperar os dados e a ação associada à Intent recebida. Você pode chamar esses métodos a qualquer momento durante o ciclo de vida da atividade, mas você geralmente deve fazer isso durante os primeiros callbacks, como onCreate() ou onStart().

Confira um snippet que mostra como recuperar dados de uma Intent:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

Siga estas práticas recomendadas para melhorar a experiência do usuário:

  • O link direto precisa levar os usuários diretamente ao conteúdo, sem solicitações, páginas intersticiais ou logins. Certifique-se de que os usuários possam ver o conteúdo do app mesmo que nunca o tenha aberto antes; Não há problema em exibir solicitações para os usuários em interações posteriores ou quando eles abrem o app na tela de início.
  • Siga as orientações de design descritas em Navegação com Voltar e Para cima para que seu app corresponda às expectativas dos usuários em relação à navegação anterior depois que eles acessarem o app por meio de um link direto.

Testar os links diretos

Você pode usar o Android Debug Bridge com a ferramenta Gerenciador de atividades (AM) para testar se os URIs do filtro de intent especificados para links diretos direcionam para a atividade correta do app. Você pode executar o comando adb em um dispositivo ou emulador.

A sintaxe geral para testar um URI de filtro de intent com adb é:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

Por exemplo, o comando abaixo tenta visualizar uma atividade de aplicativo de destino que está associado ao URI especificado.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

A declaração do manifesto e o gerenciador de intents que você configurou acima definem a conexão entre seu app e um site e o que fazer com os links de entrada. No entanto, em para que o sistema trate seu aplicativo como gerenciador padrão de um conjunto de URIs, é preciso também solicita que o sistema verifique essa conexão. A próxima aula explica como implementar essa verificação.

Para saber mais sobre intents e links de app, consulte os seguintes recursos: