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.
Configurar o Firebase e o SDK do Dynamic Links
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.
-
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.6.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' }
- No console do Firebase, abra a seção Dynamic Links. Se solicitado, aceite os Termos de Serviço.
Adicionar um filtro de intent para links diretos
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.
Processar links diretos
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 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 deFirebaseDynamicLinks.getDynamicLink()
.
Como processar Dynamic Links usando links de apps
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.jsonTodos os seus aplicativos do Firebase de pacotes devem 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.