Receber Firebase Dynamic Links no Android

Para receber o Firebase Dynamic Links que você criou, inclua o SDK Dynamic Links no app e chame o método FirebaseDynamicLinks.getDynamicLink() quando o app for carregado para receber os dados transmitidos no Dynamic Link.

  1. Adicione o Firebase ao seu projeto para Android, caso ainda não tenha feito isso.

    Ao registrar seu aplicativo, especifique sua chave de assinatura SHA-1. Se você usa links de apps, também precisa especificar sua chave SHA-256.

  2. No arquivo Gradle do módulo (nível do app) (geralmente <project>/<app-module>/build.gradle.kts ou <project>/<app-module>/build.gradle), adicione a dependência da biblioteca do Dynamic Links para Android. Recomendamos o uso do Firebase Android BoM para controlar o controle de versões da biblioteca.

    Para uma experiência ideal com o Dynamic Links, recomendamos ativar o Google Analytics no seu projeto do Firebase e adicionar o SDK do Firebase para Google Analytics ao seu app.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
    
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links'
        implementation 'com.google.firebase:firebase-analytics'
    }

    Com a Firebase Android BoM, seu app sempre vai usar versões compatíveis das bibliotecas do Firebase para Android.

    (Alternativa) Adicionar dependências das bibliotecas do Firebase sem usar o BoM

    Se você preferir não usar o Firebase BoM, especifique cada versão das bibliotecas do Firebase na linha de dependência correspondente.

    Se você usa várias bibliotecas do Firebase no app, recomendamos utilizar o BoM para gerenciar as versões delas, porque isso ajuda a garantir a compatibilidade de todas as bibliotecas.

    dependencies {
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links:22.1.0'
        implementation 'com.google.firebase:firebase-analytics:22.1.2'
    }
    Está procurando um módulo de biblioteca específico do Kotlin? A partir de outubro de 2023 (Firebase BoM 32.5.0), os desenvolvedores Kotlin e Java poderão depender do módulo da biblioteca principal. Para mais detalhes, consulte Perguntas frequentes sobre essa iniciativa).
  3. No console do Firebase, abra a seção Dynamic Links. Se solicitado, aceite os Termos de Serviço.

Assim como no caso de links diretos simples, você precisa adicionar um novo filtro de intent à atividade que envia os links diretos ao app. Esse filtro precisa capturar os links diretos do seu domínio, já que o Dynamic Link será redirecionado ao seu domínio, se o app estiver instalado. Isso é necessário para que o aplicativo receba os dados do Dynamic Link depois de ser instalado/atualizado na Play Store e depois de alguém tocar no botão "Continuar". No AndroidManifest.xml:

<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:host="example.com"
        android:scheme="https"/>
</intent-filter>

Quando os usuários abrem um Dynamic Link com um link direto para o esquema e o host especificados, seu app inicia a atividade usando esse filtro de intent a fim de processar o link.

Para receber o link direto, chame o método getDynamicLink():

Kotlin

Firebase.dynamicLinks
    .getDynamicLink(intent)
    .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? ->
        // Get deep link from result (may be null if no link is found)
        var deepLink: Uri? = null
        if (pendingDynamicLinkData != null) {
            deepLink = pendingDynamicLinkData.link
        }

        // Handle the deep link. For example, open the linked
        // content, or apply promotional credit to the user's
        // account.
        // ...
    }
    .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }


                // Handle the deep link. For example, open the linked
                // content, or apply promotional credit to the user's
                // account.
                // ...

                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "getDynamicLink:onFailure", e);
            }
        });

Chame o getDynamicLink() em todas as atividades que podem ser iniciadas pelo link, mesmo que o link seja disponibilizado na intent usando getIntent().getData(). A chamada ao getDynamicLink() recupera o link e limpa os dados. Com isso, ele é processado apenas uma vez pelo app.

O getDynamicLink() precisa ser chamado na atividade principal e em todas as atividades iniciadas pelos filtros de intent que correspondem ao link.

Análise de registro

Os eventos a seguir podem ser rastreados automaticamente no Google Analytics e mostrados no Console do Firebase.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

Para registrar esses eventos, configure Google Analytics antes de extrair o link direto. Verifique se as seguintes condições são atendidas:

  • Chame FirebaseDynamicLinks.getDynamicLink() nos pontos de entrada do app:
    • Atividades da tela de início. Por exemplo: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • Pontos de entrada da atividade. Por exemplo: onStart(), onCreate().
    • Atividades de link direto
  • Configurar e usar o Google Analytics:
    • Inclua a dependência Google Analytics. Em geral, ela é adicionada automaticamente pelo plug-in google-services do Gradle.
    • Inclua o arquivo de configuração google-services.json no seu app.
    • Chame FirebaseAnalytics.getInstance() antes de FirebaseDynamicLinks.getDynamicLink().

No Android 6.0 (nível 23 da API) e versões mais recentes, é possível configurar seu app para processar Dynamic Links diretamente, caso o app já esteja instalado. Basta usar os Links do app Android.

Adicione a impressão digital do certificado SHA256 do seu aplicativo no projeto no Console do Firebase. O Dynamic Links vai processar a configuração da associação do site de links de apps para seu domínio Dynamic Links.

Adicione um filtro de intent verificado automaticamente à atividade que processará o Dynamic Link ao definir o host no domínio do Dynamic Links do seu projeto como encontrado no console do Firebase. No AndroidManifest.xml:

<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:host="example.com/link" android:scheme="http"/>
    <data android:host="example.com/link" android:scheme="https"/>
</intent-filter>

O android:host precisa ser definido para o domínio Dynamic Links, e não para o domínio do link direto.

Todos os filtros de intent autoVerify no seu manifesto precisam ser registrados para que os links do app sejam ativados. O Firebase processa isso automaticamente para seus domínios Dynamic Links, mas você pode verificar essas informações abrindo o arquivo assetlinks.json hospedado no seu domínio Dynamic Links:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Todos os nomes de pacote dos seus apps do Firebase precisam ser incluídos.

Agora, os Dynamic Links serão enviados diretamente ao app. É possível conferir o link direto e outros dados do Dynamic Link chamando getDynamicLink() na atividade a que você adicionou o filtro de intent dos links de apps, conforme descrito em Processar links diretos.

Observação: como invocar com os links do app faz com que o usuário seja direcionado diretamente ao aplicativo, um link dinâmico não atende à versão mínima necessária. Quando o app for aberto, será necessário comparar a versão mínima do link dinâmico ( getminimumappversion) com os valores PackageInfo.versionCode e redirecionar o usuário para fazer upgrade do app, caso seja necessário, usando getUpdateAppIntent.