Crea Dynamic Links en Android

Puedes crear Dynamic Links cortos o largos con la API de Builder de Firebase Dynamic Links. Esta API acepta un Dynamic Link largo o un objeto que contenga parámetros de Dynamic Link parámetros y muestra URLs como los siguientes ejemplos:

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

Para poder crear Dynamic Links en tu app para Android, debes incluir el SDK de Firebase. Si tu app está configurada para recibir Dynamic Links, ya completaste estos pasos y puedes omitir esta sección.

  1. Si aún no lo has hecho, agrega Firebase a tu proyecto de Android.

    Cuando registres tu app, especifica la clave de firma SHA-1. Si usas App Links, también debes especificar la clave SHA‑256.

  2. En el archivo Gradle del módulo (nivel de la app) (generalmente <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle), agrega la dependencia de la biblioteca de Dynamic Links para Android. Te recomendamos usar la Firebase Android BoM para controlar las versiones de las bibliotecas.

    Para obtener una experiencia óptima con Dynamic Links, te recomendamos habilitar la Google Analytics en tu proyecto de Firebase y agregar el SDK de Firebase para Google Analytics a tu 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'
    }
    

    Cuando usas la Firebase Android BoM, tu app siempre usará versiones compatibles de las bibliotecas de Firebase para Android.

    (Alternativa)  Agrega dependencias de la biblioteca de Firebase sin usar la BoM

    Si eliges no usar la Firebase BoM, debes especificar cada versión de la biblioteca de Firebase en su línea de dependencia.

    Ten en cuenta que, si usas múltiples bibliotecas de Firebase en tu app, es muy recomendable que uses la BoM para administrar las versiones de las bibliotecas para garantizar que todas las versiones sean compatibles.

    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'
    }
    
    ¿Buscas un módulo de biblioteca específico de Kotlin? A partir de octubre de 2023 (Firebase BoM 32.5.0), tanto los desarrolladores de Kotlin como los de Java pueden depender del módulo de la biblioteca principal (para obtener más información, consulta las Preguntas frecuentes sobre esta iniciativa).
  3. En Firebase console, abre la sección Dynamic Links.
  4. Si aún no aceptaste las Condiciones del Servicio ni configuraste un dominio para los Dynamic Links, deberás hacerlo cuando el sistema lo solicite.

    Si ya creaste un dominio de Dynamic Links, anótalo. Debes proporcionar un dominio Dynamic Links cuando crees Dynamic Links de manera programática.

  5. Recomendado: Especifica los patrones de URL que se permiten en tus vínculos directos y de resguardo. De esa manera, evitas que grupos no autorizados creen Dynamic Links que redireccionen de tu dominio a otros sitios que no puedes controlar. Consulta Permite patrones de URL específicos.

Usa la consola de Firebase

Si quieres generar un único Dynamic Link, ya sea para fines de pruebas o para que tu equipo de marketing cree fácilmente un vínculo que pueda usarse en algo como una publicación de redes sociales, la forma más sencilla sería visitar la consola de Firebase o crear uno manualmente siguiendo el formulario paso a paso.

Para crear un Dynamic Link, crea un nuevo objeto DynamicLink con su Builder, especificando los parámetros Dynamic Link con los métodos Builder. Luego, llama a buildDynamicLink o buildShortDynamicLink.

El siguiente ejemplo simple crea un Dynamic Link largo a https://www.example.com/ que se abre con tu app para Android y la app com.example.ios en 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 crear un Dynamic Link corto, compila un DynamicLink de la misma manera y, a continuación, llama a buildShortDynamicLink. La compilación de un vínculo corto requiere una llamada de red, de manera que, en lugar de mostrar directamente el vínculo, buildShortDynamicLink muestra un Task, que habilita el vínculo corto cuando se completa la solicitud. Por ejemplo:

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.component1 and
    // com.google.firebase.dynamiclinks.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
                    // ...
                }
            }
        });

De forma predeterminada, se generan Dynamic Links cortos con sufijos de vínculos de 17 caracteres. Esto hace que sea muy improbable que una persona adivine un Dynamic Link válido. Si en tu caso de uso no es perjudicial que una persona adivine correctamente los vínculos cortos, puedes generar sufijos que solo tengan el largo suficiente para que sean únicos. Para ello, pasa ShortDynamicLink.Suffix.SHORT al método buildShortDynamicLinkde esta manera:

Kotlin+KTX

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

Java

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

Puedes usar la API de Dynamic Link Builder para crear Dynamic Links con cualquiera de los parámetros admitidos. Consulta la referencia de la API para obtener más detalles.

En el siguiente ejemplo, se crea un Dynamic Link con varios parámetros conjuntos de ejemplos comunes:

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

Puedes configurar parámetros de Dynamic Link con los siguientes métodos:

Parámetros de Dynamic Link
setLink

El vínculo que abrirá tu app. Especifica una URL que tu app pueda manejar, como el contenido o la carga útil, que inicia una lógica específica de la app (como darle créditos al usuario con un cupón o mostrar una pantalla de bienvenida). Este vínculo debe ser una URL con un formato correcto y la codificación URL adecuada, debe usar HTTP o HTTPS y no puede ser otro Dynamic Link.

setDomainUriPrefix El prefijo de URL de Dynamic Link, que puedes encontrar en la consola de Firebase. Un dominio Dynamic Link se parece a los siguientes ejemplos:
https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl El vínculo que se debe abrir cuando la app no está instalada. Especifica el parámetro para hacer otra acción que no sea instalar tu app desde Play Store cuando no esté instalada, como abrir la versión web móvil del contenido o mostrar una página promocional de tu app.
setMinimumVersion El versionCode de la versión mínima de tu app que puede abrir el vínculo. Si la app instalada es una versión anterior, se dirige al usuario a Play Store para que la actualice.
IosParameters
setAppStoreId El ID de la app en App Store, que se usa para enviar usuarios a App Store cuando la app no está instalada.
setFallbackUrl El vínculo que se debe abrir cuando la app no está instalada. Especifica este parámetro para hacer otra acción que no sea instalar la app desde App Store cuando no esté instalada, como abrir la versión web móvil del contenido o mostrar una página promocional de la app.
setCustomScheme El esquema URL personalizado de la app si se define con un valor diferente del ID del paquete.
setIpadFallbackUrl El vínculo que se debe abrir en iPads cuando la app no está instalada. Especifica este parámetro para hacer otra acción que no sea instalar la app desde App Store cuando no esté instalada, como abrir la versión web del contenido o mostrar una página promocional de la app.
setIpadBundleId El ID de paquete de la app para iOS que se usa en iPads para abrir el vínculo. La app debe estar conectada a tu proyecto desde la página de descripción general de la consola de Firebase.
setMinimumVersion El número de la versión mínima de la app que puede abrir el vínculo. Este indicador pasa a la app cuando esta se abre, y la app debe decidir qué hacer con él.
NavigationInfoParameters
setForcedRedirectEnabled Si se configura en “1”, omite la página de vista previa de la app cuando se abre el Dynamic Link y, en su lugar, redirecciona a la app o la tienda. La página de vista previa de la app (habilitada de forma predeterminada) puede enviar a los usuarios de manera más confiable al destino más apropiado cuando abren Dynamic Links en apps. Sin embargo, si esperas que se abra un Dynamic Link solo en apps que pueden abrir Dynamic Links de manera confiable sin esta página, puedes inhabilitarlo con este parámetro. Este parámetro afectará el comportamiento de Dynamic Link solo en iOS.
SocialMetaTagParameters
setTitle El título que se usará cuando se comparta el Dynamic Link en una publicación de redes sociales.
setDescription La descripción que se usará cuando se comparta el Dynamic Link en una publicación de redes sociales.
setImageUrl La URL a una imagen relacionada con este vínculo. La imagen debe tener, al menos, 300 × 200 px y pesar menos de 300 KB.
GoogleAnalyticsParameters
setSource
setMedium
setCampaign
setTerm
setContent
Parámetros de análisis de Google Play. Estos parámetros (utm_source, utm_medium, utm_campaign, utm_term, utm_content) se pasan a Play Store y se agregan a la carga útil del vínculo.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
Parámetros de análisis de iTunes Connect. Estos parámetros (pt, at y ct) se pasan a la App Store.

Para acortar un Dynamic Link largo, especifica la URL del Dynamic Link con setLongLink en lugar de establecer parámetros con el otro método de compilador:

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.component1 and
    // com.google.firebase.dynamiclinks.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
                    // ...
                }
            }
        });