Criar Dynamic Links no Android

Crie links dinâmicos curtos ou longos com a API Firebase Dynamic Links Builder. Essa API aceita um link dinâmico longo ou um objeto que contenha parâmetros correspondentes e retorna URLs, como no exemplo a seguir:

https://example.com/link/WXYZ
https://example.page.link/WXYZ

Antes de criar Dynamic Links no seu app Android, é necessário incluir o SDK do Firebase. Caso seu app esteja configurado para receber links dinâmicos, você já concluiu essas etapas e pode ignorar esta seção.

  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. Usando a BoM do Firebase para Android, declare a dependência da biblioteca Android do Dynamic Links no seu arquivo do Gradle (nível do app) do módulo, que geralmente é app/build.gradle.

    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.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare 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 usará versões compatíveis das bibliotecas do Firebase para Android.

    (Alternativa) Declare as 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.

    Caso você use várias bibliotecas do Firebase no seu app, recomendamos usar a BoM para gerenciar as versões dessas bibliotecas para garantir a compatibilidade de todas elas.

    dependencies {
        // Declare 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.0.1'
        implementation 'com.google.firebase:firebase-analytics:21.1.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare 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 usará versões compatíveis das bibliotecas do Firebase para Android.

    (Alternativa) Declare as 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.

    Caso você use várias bibliotecas do Firebase no seu app, recomendamos usar a BoM para gerenciar as versões dessas bibliotecas para garantir a compatibilidade de todas elas.

    dependencies {
        // Declare 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.0.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0'
    }
    
  3. No Console do Firebase, abra a seção Dynamic Links.
  4. Se você ainda não aceitou os termos de serviço e definiu um domínio para o Dynamic Links, faça isso quando solicitado.

    Se você já tem um domínio do Dynamic Links, anote-o. Você precisa fornecer um domínio dos Dynamic Links ao criá-los de maneira programática.

  5. Recomendado: especifique os padrões de URL permitidos nos seus links diretos e links de fallback. Ao fazer isso, você evita que pessoas não autorizadas criem Dynamic Links que redirecionam para sites que você não controla no seu domínio. Consulte Permitir padrões de URL específicos.

No Console do Firebase

Caso você queira fazer testes ou facilitar para sua equipe de marketing a criação de um link a ser usado em uma postagem de mídia social, acesse o Console do Firebase e siga o formulário passo a passo para gerar um link dinâmico único da maneira mais simples.

Para gerar um link dinâmico, crie um novo objeto DynamicLink usando o builder e especificando os parâmetros usando os métodos do builder. Em seguida, chame buildDynamicLink ou buildShortDynamicLink.

O exemplo mínimo a seguir cria um link dinâmico longo para https://www.example.com/, que é aberto no seu app para Android e no app com.example.ios no iOS:

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Open links with this app on Android
        .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
        // Open links with com.example.ios on iOS
        .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build())
        .buildDynamicLink();

Uri dynamicLinkUri = dynamicLink.getUri();

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Open links with this app on Android
    androidParameters { }
    // Open links with com.example.ios on iOS
    iosParameters("com.example.ios") { }
}

val dynamicLinkUri = dynamicLink.uri

Para gerar um Dynamic Link curto, crie um DynamicLink da mesma forma e chame buildShortDynamicLink. A criação de um link curto requer uma chamada de rede. Por isso, em vez de gerar o link diretamente, buildShortDynamicLink retorna um Task, disponibilizando o link curto quando a solicitação é concluída. Exemplo:

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Set parameters
        // ...
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Set parameters
    // ...
}.addOnSuccessListener { (shortLink, flowchartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

    // Short link created
    processShortLink(shortLink, flowchartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Por padrão, os Dynamic Links curtos são gerados com sufixos de links de 17 caracteres que tornam extremamente improvável que alguém consiga adivinhar um link dinâmico válido. Se não há problemas em um usuário conseguir descobrir um link curto no seu caso de uso, convém gerar sufixos longos o suficiente para serem exclusivos. Nesse caso, basta enviar ShortDynamicLink.Suffix.SHORT ao método buildShortDynamicLink:

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        // ...
        .buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
        // ...

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
    // Set parameters
    // ...
}

É possível usar a API Dynamic Link Builder para criar Dynamic Links com qualquer um dos parâmetros aceitos. Consulte a referência da API para ver mais detalhes.

O exemplo a seguir cria um link dinâmico com vários parâmetros comuns definidos:

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        .setAndroidParameters(
                new DynamicLink.AndroidParameters.Builder("com.example.android")
                        .setMinimumVersion(125)
                        .build())
        .setIosParameters(
                new DynamicLink.IosParameters.Builder("com.example.ios")
                        .setAppStoreId("123456789")
                        .setMinimumVersion("1.0.1")
                        .build())
        .setGoogleAnalyticsParameters(
                new DynamicLink.GoogleAnalyticsParameters.Builder()
                        .setSource("orkut")
                        .setMedium("social")
                        .setCampaign("example-promo")
                        .build())
        .setItunesConnectAnalyticsParameters(
                new DynamicLink.ItunesConnectAnalyticsParameters.Builder()
                        .setProviderToken("123456")
                        .setCampaignToken("example-promo")
                        .build())
        .setSocialMetaTagParameters(
                new DynamicLink.SocialMetaTagParameters.Builder()
                        .setTitle("Example of a Dynamic Link")
                        .setDescription("This link works whether the app is installed or not!")
                        .build())
        .buildDynamicLink();  // Or buildShortDynamicLink()

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink { // or Firebase.dynamicLinks.shortLinkAsync
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    androidParameters("com.example.android") {
        minimumVersion = 125
    }
    iosParameters("com.example.ios") {
        appStoreId = "123456789"
        minimumVersion = "1.0.1"
    }
    googleAnalyticsParameters {
        source = "orkut"
        medium = "social"
        campaign = "example-promo"
    }
    itunesConnectAnalyticsParameters {
        providerToken = "123456"
        campaignToken = "example-promo"
    }
    socialMetaTagParameters {
        title = "Example of a Dynamic Link"
        description = "This link works whether the app is installed or not!"
    }
}

Você pode definir os parâmetros de link dinâmico com os seguintes métodos:

Parâmetros de Dynamic Links
setLink

O link que será aberto pelo app. É possível especificar um URL que pode ser processado pelo seu app, geralmente o conteúdo ou payload de um app, que pode iniciar uma lógica específica do app, como creditar o usuário com um cupom ou exibir uma tela de boas-vindas. Esse link precisa ser um URL de formato correto, ter a codificação de URL adequada e usar HTTP ou HTTPS. Além disso, ele não pode ser outro Dynamic Link.

setDomainUriPrefix Seu prefixo de URL de Dynamic Link, que você pode encontrar no Console do Firebase. Um domínio de Dynamic Link é semelhante aos exemplos a seguir:

https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl O link a ser aberto quando o app não estiver instalado. Especifique isso para realizar outra ação que não seja instalar o app da Play Store quando ele não estiver instalado. A ação pode ser abrir a versão Web para dispositivos móveis com o conteúdo ou exibir uma página promocional para o app.
setMinimumVersion O versionCode da versão mínima do app que pode abrir o link. Se o app instalado for uma versão mais antiga, o usuário será direcionado para a Play Store para atualizá-lo.
IosParameters
setAppStoreId O ID da App Store do seu app, usado para direcionar os usuários à App Store quando o app não estiver instalado.
setFallbackUrl O link a ser aberto quando o app não estiver instalado. Especifique isso para realizar outra ação que não seja instalar o app da App Store quando ele não estiver instalado. A ação pode ser abrir a versão Web para dispositivos móveis com o conteúdo ou exibir uma página promocional para o app.
setCustomScheme O esquema de URL personalizado do seu app, se definido de modo diferente do ID do pacote do seu app.
setIpadFallbackUrl O link a ser aberto em iPads quando o app não estiver instalado. Especifique isso para realizar outra ação, que não seja instalar o app da App Store quando ele não estiver instalado. A ação pode ser abrir a versão Web com o conteúdo ou exibir uma página promocional para o app.
setIpadBundleId O ID do pacote do app para iOS a ser usado em iPads para abrir o link. O app precisa estar conectado ao seu projeto pela Página de visão geral no Console do Firebase.
setMinimumVersion O número da versão mínima do seu app que pode abrir o link. Essa sinalização é transmitida para o seu app no momento em que ele é aberto, e seu app precisa decidir o que fazer.
NavigationInfoParameters
setForcedRedirectEnabled Se configurado como "1", ignore a página de visualização do app quando o Dynamic Link for aberto e, em vez disso, redirecione-o para o aplicativo ou a loja. A página de visualização do app é ativada por padrão e pode direcionar usuários de maneira mais confiável ao destino apropriado quando eles abrem Dynamic Links em apps. Caso você queira que um link dinâmico seja aberto apenas em apps que fazem isso de maneira confiável sem a página de visualização, ela pode ser desativada com este parâmetro. Este parâmetro afetará o comportamento do link dinâmico somente no iOS.
SocialMetaTagParameters
setTitle O título a ser usado quando o Dynamic Link é compartilhado em uma postagem de mídia social.
setDescription A descrição a ser usada quando o Dynamic Link é compartilhado em uma postagem de mídia social.
setImageUrl O URL para uma imagem relacionada a este link. A imagem precisa ser de pelo menos 300 x 200 px e ter menos de 300 KB.
GoogleAnalyticsParameters
setSource
setMedium
setCampaign
setTerm
setContent
Parâmetros de análise para o Google Play. Esses parâmetros (utm_source, utm_medium, utm_campaign, utm_term, utm_content) são transmitidos para a Play Store e anexados ao payload do link.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
Parâmetros de análise para o iTunes Connect. Esses parâmetros (pt, at, ct) são transmitidos para a App Store.

Para encurtar um Dynamic Link longo, especifique o URL dele usando setLongLink em vez de configurar parâmetros com os métodos do outro builder:

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios"))
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    longLink = Uri.parse("https://example.page.link/?link=" +
            "https://www.example.com/&apn=com.example.android&ibn=com.example.ios")
}.addOnSuccessListener { (shortLink, flowChartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

    // Short link created
    processShortLink(shortLink, flowChartLink)
}.addOnFailureListener {
    // Error
    // ...
}