Criar Dynamic Links no Android

Você pode criar Dynamic Links curtos ou longos com a API Firebase Dynamic Links Builder. Essa API aceita um Dynamic Link 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 poder criar Dynamic Links no seu app para Android, você precisa incluir o SDK do Firebase. Se o seu app estiver configurado para receber Dynamic Links, 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. No arquivo build.gradle no nível do projeto, inclua o repositório Maven do Google nas seções buildscript e allprojects.
  3. Adicione a dependência da biblioteca do Dynamic Links para Android ao arquivo do Gradle (no nível de app) do módulo, geralmente app/build.gradle:

    Para uma experiência ideal com o Dynamic Links, recomendamos ativar o Google Analytics no seu projeto. Além disso, como parte da configuração do Google Analytics, você precisa adicionar o SDK do Firebase para Google Analytics ao seu app.

    Java

    implementation 'com.google.firebase:firebase-dynamic-links:19.1.0'
    implementation 'com.google.firebase:firebase-analytics:17.4.4'

    Kotlin+KTX

    implementation 'com.google.firebase:firebase-dynamic-links-ktx:19.1.0'
    implementation 'com.google.firebase:firebase-analytics-ktx:17.4.4'
  4. No Firebase console, abra a seção Dynamic Links.
  5. 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. É preciso fornecer um domínio do Dynamic Links ao criar Dynamic Links de maneira programática.

  6. Recomendado: especifique os padrões de URL permitidos nos seus links diretos e de fallback. Ao fazer isso, você evita que pessoas não autorizadas criem Dynamic Links que redirecionam para sites que você não controla a partir do seu domínio. Consulte Padrões de URL da lista de permissões.

Usar o Console do Firebase

Caso você queira fazer testes ou facilitar a criação de um link a ser usado pela sua equipe de marketing em uma postagem de mídia social, acesse o Console do Firebase e siga o formulário passo a passo para gerar um Dynamic Link único de forma fácil.

Para gerar um Dynamic Link, crie um novo objeto DynamicLink usando o construtor e especificando os parâmetros por meio dos métodos do construtor. Em seguida, chame buildDynamicLink ou buildShortDynamicLink.

O exemplo mínimo a seguir cria um Dynamic Link 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 depois 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 { result ->
    // Short link created
    val shortLink = result.shortLink
    val flowchartLink = result.previewLink
}.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 Dynamic Link válido. Se não houver problemas em um usuário conseguir prever um link curto no seu caso de uso, convém gerar sufixos que sejam apenas longos o bastante para serem exclusivos. Para isso, 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 Dynamic Link 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 Dynamic Link 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/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 seu 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 código 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 código de 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 código de pacote do app para iOS a ser usado em iPads para abrir o link. O app precisa estar conectado ao seu projeto a partir da 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) pode enviar usuários de maneira mais confiável para o destino apropriado quando eles abrem Dynamic Links em apps. No entanto, se você espera que um Dynamic Link seja aberto somente em apps que possam abrir Dynamic Links de maneira confiável sem esta página, você pode desativá-lo com este parâmetro. Observação: no momento, a página de visualização do app só é exibida no iOS, mas, em breve, ela também poderá ser aberta no Android. Este parâmetro afetará o comportamento do Dynamic Link em ambas as plataformas.
SocialMetaTagParameters
setTitle O título a ser usado quando o Dynamic Link é compartilhado em uma postagem social.
setDescription A descrição a ser usada quando o Dynamic Link é compartilhado em uma postagem 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 construtor:

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 { result ->
    // Short link created
    val shortLink = result.shortLink
    val flowchartLink = result.previewLink
}.addOnFailureListener {
    // Error
    // ...
}