Receber Firebase Dynamic Links no Android

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

  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 Android do Dynamic Links. Para gerenciar o controle de versões das bibliotecas, recomendamos usar a BoM do Firebase para Android.

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

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
    
        // 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-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    Com a BoM do Firebase para Android, 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 a BoM

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

    Se você usa várias bibliotecas do Firebase no seu app, recomendamos utilizar a 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-ktx:21.1.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0'
    }
    

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
    
        // 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 BoM do Firebase para Android, 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 a BoM

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

    Se você usa várias bibliotecas do Firebase no seu app, recomendamos utilizar a 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:21.1.0'
        implementation 'com.google.firebase:firebase-analytics:21.3.0'
    }
    
  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 link dinâmico será redirecionado ao seu domínio, se o app estiver instalado. Isso é necessário para que o aplicativo receba os dados do link dinâmico depois de ser instalado/atualizado na Play Store e depois de alguém tocar no botão "Continuar". Em 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 link dinâmico 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+KTX

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 são rastreados automaticamente no Google Analytics e exibidos no Console do Firebase.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

Para registrar esses eventos, configure o Google Analytics antes de recuperar 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
  • Configure e use o Google Analytics:
    • Inclua a dependência do 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 da ferramenta.

Adicione um filtro de intent verificado automaticamente à atividade que vai processar o link dinâmico. Basta configurar o host no domínio do Dynamic Links do seu projeto, conforme 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 do Dynamic Links, e não para o domínio do seu 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 esses filtros automaticamente para seus domínios do Dynamic Links, mas é possível verificar essas informações abrindo o arquivo assetlinks.json hospedado no domínio correspondente:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Todos os pacotes dos 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 link dinâmico 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.