Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Criar links dinâmicos no Android

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Você pode criar links dinâmicos curtos ou longos com a API Firebase Dynamic Links Builder. Essa API aceita um Dynamic Link longo ou um objeto contendo parâmetros de Dynamic Link e retorna URLs como os exemplos a seguir:

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

Antes de criar links dinâmicos em seu aplicativo Android, você deve incluir o SDK do Firebase. Se seu aplicativo estiver configurado para receber links dinâmicos, você já concluiu essas etapas e pode pular esta seção.

  1. Se ainda não o fez, adicione o Firebase ao seu projeto Android .

    Ao registrar seu aplicativo, especifique sua chave de assinatura SHA-1. Se você usar App Links, especifique também sua chave SHA-256.

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

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

    Kotlin+KTX

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

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca Firebase sem usar o BoM

    Se você optar por não usar o Firebase BoM, deverá especificar cada versão da biblioteca Firebase em sua linha de dependência.

    Observe que, se você usar várias bibliotecas do Firebase em seu aplicativo, recomendamos usar o BoM para gerenciar as versões da biblioteca, o que garante que todas as versões sejam compatíveis.

    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.2.0'
    }
    

    Java

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

    Ao usar o Firebase Android BoM , seu aplicativo sempre usará versões compatíveis das bibliotecas do Firebase Android.

    (Alternativa) Adicionar dependências da biblioteca Firebase sem usar o BoM

    Se você optar por não usar o Firebase BoM, deverá especificar cada versão da biblioteca Firebase em sua linha de dependência.

    Observe que, se você usar várias bibliotecas do Firebase em seu aplicativo, recomendamos usar o BoM para gerenciar as versões da biblioteca, o que garante que todas as versões sejam compatíveis.

    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.2.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 seus links dinâmicos, faça-o quando solicitado.

    Se você já possui um domínio do Dynamic Links, anote-o. Você precisa fornecer um domínio de Dynamic Links ao criar Dynamic Links de forma programática.

  5. Recomendado : especifique os padrões de URL permitidos em seus links diretos e links alternativos. Ao fazer isso, você impede que terceiros não autorizados criem links dinâmicos que redirecionem de seu domínio para sites que você não controla. Consulte Permitir padrões de URL específicos .

Use o console do Firebase

Se você deseja gerar um único link dinâmico, seja para fins de teste ou para sua equipe de marketing criar facilmente um link que possa ser usado em algo como uma postagem de mídia social, a maneira mais simples seria visitar o console do Firebase e criar um manualmente seguindo o formulário passo a passo.

Para criar um Dynamic Link, crie um novo objeto DynamicLink com seu Builder, especificando os parâmetros do Dynamic Link com os métodos 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 abre com seu aplicativo Android no Android e o aplicativo com.example.ios no iOS:

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

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();

Para criar um Dynamic Link curto, crie um DynamicLink da mesma maneira e chame buildShortDynamicLink . A construção de um link curto requer uma chamada de rede, portanto, em vez de retornar o link diretamente, buildShortDynamicLink retorna uma Task , que disponibiliza o link curto quando a solicitação é concluída. Por exemplo:

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
    // ...
}

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
                    // ...
                }
            }
        });

Por padrão, links dinâmicos curtos são gerados com sufixos de link de 17 caracteres que tornam extremamente improvável que alguém possa adivinhar um link dinâmico válido. Se, para o seu caso de uso, não houver mal algum em alguém adivinhar com sucesso um link curto, você pode preferir gerar sufixos que sejam tão longos quanto necessários para serem exclusivos, o que você pode fazer passando ShortDynamicLink.Suffix.SHORT para o método buildShortDynamicLink :

Kotlin+KTX

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

Java

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

Você pode usar a API do Dynamic Link Builder para criar links dinâmicos com qualquer um dos parâmetros suportados. Consulte a referência da API para obter detalhes.

O exemplo a seguir cria um Dynamic Link com vários parâmetros comuns definidos:

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!"
    }
}

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()

Você pode definir os parâmetros do Dynamic Link com os seguintes métodos:

Parâmetros do DynamicLink
setLink

O link que seu aplicativo abrirá. Especifique uma URL que seu aplicativo possa manipular, geralmente o conteúdo ou carga útil do aplicativo, que inicia a lógica específica do aplicativo (como creditar ao usuário um cupom ou exibir uma tela de boas-vindas). Este link deve ser um URL bem formatado, ter o URL codificado corretamente, usar HTTP ou HTTPS e não pode ser outro link dinâmico.

setDomainUriPrefix Seu prefixo de URL do link dinâmico, que pode ser encontrado no console do Firebase. Um domínio de link dinâmico se parece com os seguintes exemplos:
https://example.com/link
https://example.page.link
Parâmetros do Android
setFallbackUrl O link a ser aberto quando o aplicativo não estiver instalado. Especifique isso para fazer algo diferente de instalar seu aplicativo da Play Store quando o aplicativo não estiver instalado, como abrir a versão da web móvel do conteúdo ou exibir uma página promocional para seu aplicativo.
setMinimumVersion O versionCode da versão mínima do seu aplicativo que pode abrir o link. Se o aplicativo instalado for uma versão mais antiga, o usuário será levado à Play Store para atualizar o aplicativo.
Parâmetros Ios
setAppStoreId O ID da App Store do seu aplicativo, usado para enviar usuários à App Store quando o aplicativo não está instalado
setFallbackUrl O link a ser aberto quando o aplicativo não estiver instalado. Especifique isso para fazer algo diferente de instalar seu aplicativo da App Store quando o aplicativo não estiver instalado, como abrir a versão móvel da web do conteúdo ou exibir uma página promocional para seu aplicativo.
setCustomScheme O esquema de URL personalizado do seu aplicativo, se definido para ser algo diferente do ID do pacote do seu aplicativo
setIpadFallbackUrl O link para abrir em iPads quando o aplicativo não estiver instalado. Especifique isso para fazer algo diferente de instalar seu aplicativo da App Store quando o aplicativo não estiver instalado, como abrir a versão web do conteúdo ou exibir uma página promocional para seu aplicativo.
setIpadBundleId O ID do pacote do aplicativo iOS a ser usado em iPads para abrir o link. O aplicativo deve estar conectado ao seu projeto na página Visão geral do console do Firebase.
setMinimumVersion O número da versão mínima do seu aplicativo que pode abrir o link. Esse sinalizador é passado para seu aplicativo quando ele é aberto e seu aplicativo deve decidir o que fazer com ele.
NavigationInfoParameters
setForcedRedirectEnabled Se definido como '1', pule a página de visualização do aplicativo quando o link dinâmico for aberto e, em vez disso, redirecione para o aplicativo ou loja. A página de visualização do aplicativo (ativada por padrão) pode enviar os usuários de forma mais confiável para o destino mais apropriado quando eles abrem Dynamic Links em aplicativos; no entanto, se você espera que um link dinâmico seja aberto apenas em aplicativos que podem abrir links dinâmicos de forma confiável sem esta página, você pode desativá-lo com este parâmetro. Este parâmetro afetará o comportamento do Dynamic Link apenas no iOS.
Parâmetros SocialMetaTag
definirTitulo O título a ser usado quando o link dinâmico é compartilhado em uma postagem social.
setDescription A descrição a ser usada quando o link dinâmico é compartilhado em uma postagem social.
setImageUrl A URL para uma imagem relacionada a este link. A imagem deve ter pelo menos 300 x 200 px e menos de 300 KB.
Parâmetros do Google Analytics
setSource
setMedium
definirCampanha
setTerm
definirConteúdo
Parâmetros de análise do Google Play. Esses parâmetros ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) são passados ​​para a Play Store e anexados à carga útil do link.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
Parâmetros analíticos do iTunes Connect. Esses parâmetros ( pt , at , ct ) são passados ​​para a App Store.

Para encurtar um Dynamic Link longo, especifique o URL do Dynamic Link usando setLongLink em vez de definir parâmetros com os outros métodos do construtor:

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
    // ...
}

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
                    // ...
                }
            }
        });