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 tentará cada uma das seguintes ações, em ordem sequencial, até que a solicitação seja bem-sucedida:

  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 app somente se ele for aprovado para o domínio específico contido naquela intent da Web. Se o app não for aprovado para domínio, a intent da Web é resolvida para o app de navegação padrão do usuário como alternativa.

Adicionar filtros de intent para links recebidos

Para criar um link para o conteúdo do app, adicione um filtro de intent que: contém estes elementos e valores de atributos no manifesto:

<action>
Especifique a ação da intent ACTION_VIEW para que que o filtro de intenção possa ser acessado na 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 pode ser iniciada somente se a intent especificar o nome do componente do seu 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 for declarar IDs únicos (como uma combinação específica de scheme e host), porque vários elementos <data> no mesmo filtro de intent são mesclados juntos 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 com os dois, mais estes: 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 o conteúdo da atividade ao app manifesto, o Android vai conseguir rotear qualquer Intent com URIs correspondentes ao app no momento da 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. Ligação os objetos getData() e métodos getAction() para recuperar os dados e associada ao Intent recebido. Você pode chamar esses métodos a qualquer momento durante o ciclo de vida da atividade, mas você geralmente devem fazer isso durante os primeiros callbacks, como onCreate() ou onStart().

Aqui está 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 anteriormente; Não há problema em perguntar aos usuários em interações subsequentes ou quando eles abrirem o app do acesso rápido.
  • Siga as orientações de design descritas em Navegação com "Voltar" e "Para cima" para que seu app corresponda às as expectativas para a navegação de trás para frente ele entra no app por um link direto.

Testar os links diretos

É possível usar o comando Android Debug Ponte com a ferramenta gerenciador de atividades (AM) para testar se o filtro de intent Os URIs 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: