Crear enlaces dinámicos en Android

Puedes crear enlaces dinámicos cortos o largos con la API de Firebase Dynamic Links Builder. Esta API acepta un enlace dinámico largo o un objeto que contiene parámetros de enlace dinámico y devuelve URL como los siguientes ejemplos:

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

Antes de poder crear vínculos dinámicos en su aplicación de Android, debe incluir el SDK de Firebase. Si su aplicación está configurada para recibir enlaces dinámicos, ya completó estos pasos y puede omitir esta sección.

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

    Cuando registre su aplicación, especifique su clave de firma SHA-1. Si utiliza App Links, especifique también su clave SHA-256.

  2. En el archivo Gradle de su módulo (nivel de aplicación) (generalmente <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle ), agregue la dependencia para Dynamic Links biblioteca para Android. Recomendamos utilizar Firebase Android BoM para controlar el control de versiones de la biblioteca.

    Para una experiencia óptima con Dynamic Links, recomendamos habilitar Google Analytics en su proyecto de Firebase y agregar el SDK de Firebase para Google Analytics a su aplicación.

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

    Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.

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

    Si elige no utilizar la BoM de Firebase, debe especificar cada versión de la biblioteca de Firebase en su línea de dependencia.

    Tenga en cuenta que si usa varias bibliotecas de Firebase en su aplicación, le recomendamos encarecidamente usar la BoM para administrar las versiones de la biblioteca, lo que garantiza 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:21.2.0'
        implementation 'com.google.firebase:firebase-analytics:21.6.1'
    }
    
    ¿Busca 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 podrán depender del módulo de biblioteca principal (para más detalles, consulte las preguntas frecuentes sobre esta iniciativa ).
  3. En Firebase console, abre la sección Enlaces dinámicos .
  4. Si aún no ha aceptado los términos de servicio y no ha configurado un dominio para sus Dynamic Links, hágalo cuando se le solicite.

    Si ya tienes un dominio de Dynamic Links, toma nota. Debe proporcionar un dominio de Dynamic Links cuando crea Dynamic Links mediante programación.

  5. Recomendado : especifique los patrones de URL permitidos en sus enlaces profundos y enlaces alternativos. Al hacerlo, evita que partes no autorizadas creen vínculos dinámicos que redireccionen desde su dominio a sitios que no controla. Consulte Permitir patrones de URL específicos .

Usa la consola de Firebase

Si desea generar un único enlace dinámico, ya sea con fines de prueba o para que su equipo de marketing cree fácilmente un enlace que pueda usarse en algo como una publicación en las redes sociales, la forma más sencilla sería visitar Firebase console y crear uno. manualmente siguiendo el formulario paso a paso.

Para crear un vínculo dinámico, cree un nuevo objeto DynamicLink con su generador, especificando los parámetros del vínculo dinámico con los métodos del generador. Luego, llame buildDynamicLink o buildShortDynamicLink .

El siguiente ejemplo mínimo crea un enlace dinámico largo a https://www.example.com/ que se abre con su aplicación de Android en Android y la aplicación 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 vínculo dinámico corto, cree un DynamicLink de la misma manera y luego llame a buildShortDynamicLink . La creación de un vínculo corto requiere una llamada de red, por lo que en lugar de devolver el vínculo directamente, buildShortDynamicLink devuelve una Task , que hace que el vínculo corto esté disponible 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, los enlaces dinámicos cortos se generan con sufijos de enlace de 17 caracteres que hacen que sea extremadamente improbable que alguien pueda adivinar un enlace dinámico válido. Si, para su caso de uso, no hay ningún problema en que alguien adivine con éxito un enlace corto, es posible que prefiera generar sufijos que sean tan largos como sea necesario para ser únicos, lo cual puede hacer pasando ShortDynamicLink.Suffix.SHORT al 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);
        // ...

Puede utilizar la API Dynamic Link Builder para crear enlaces dinámicos con cualquiera de los parámetros admitidos. Consulte la referencia de API para obtener más detalles.

El siguiente ejemplo crea un vínculo dinámico con varios parámetros comunes establecidos:

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

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

Parámetros de enlace dinámico
establecerEnlace

El enlace que se abrirá su aplicación. Especifique una URL que su aplicación pueda manejar, generalmente el contenido o la carga útil de la aplicación, lo que inicia la lógica específica de la aplicación (como acreditar al usuario un cupón o mostrar una pantalla de bienvenida). Este enlace debe ser una URL con buen formato, estar codificada correctamente, usar HTTP o HTTPS y no puede ser otro enlace dinámico.

setDomainUriPrefix Su prefijo de URL de enlace dinámico, que puede encontrar en Firebase console. Un dominio de Dynamic Link se parece a los siguientes ejemplos:
https://example.com/link
https://example.page.link
AndroidParámetros
setFallbackUrl El enlace para abrir cuando la aplicación no está instalada. Especifique esto para hacer algo más que instalar su aplicación desde Play Store cuando la aplicación no esté instalada, como abrir la versión web móvil del contenido o mostrar una página promocional para su aplicación.
establecerVersiónMínima El versionCode de la versión mínima de su aplicación que puede abrir el enlace. Si la aplicación instalada es una versión anterior, el usuario es llevado a Play Store para actualizar la aplicación.
IosParámetros
establecerAppStoreId El ID de la App Store de tu aplicación, que se utiliza para enviar a los usuarios a la App Store cuando la aplicación no está instalada.
setFallbackUrl El enlace para abrir cuando la aplicación no está instalada. Especifique esto para hacer algo más que instalar su aplicación desde App Store cuando la aplicación no esté instalada, como abrir la versión web móvil del contenido o mostrar una página promocional para su aplicación.
establecerEsquemaPersonalizado El esquema de URL personalizado de su aplicación, si se define como algo distinto al ID del paquete de su aplicación
setIpadFallbackUrl El enlace para abrir en iPads cuando la aplicación no está instalada. Especifique esto para hacer algo más que instalar su aplicación desde App Store cuando la aplicación no esté instalada, como abrir la versión web del contenido o mostrar una página promocional para su aplicación.
establecerIpadBundleId El ID del paquete de la aplicación de iOS que se usará en iPads para abrir el enlace. La aplicación debe estar conectada a su proyecto desde la página Descripción general de Firebase console.
establecerVersiónMínima El número de versión de la versión mínima de su aplicación que puede abrir el enlace. Esta marca se pasa a su aplicación cuando se abre y su aplicación debe decidir qué hacer con ella.
Parámetros de información de navegación
setForcedRedirectEnabled Si se establece en '1', omita la página de vista previa de la aplicación cuando se abra el enlace dinámico y, en su lugar, redirija a la aplicación o tienda. La página de vista previa de la aplicación (habilitada de forma predeterminada) puede enviar a los usuarios de manera más confiable al destino más apropiado cuando abren Dynamic Links en las aplicaciones; sin embargo, si espera que un vínculo dinámico se abra solo en aplicaciones que pueden abrir vínculos dinámicos de manera confiable sin esta página, puede desactivarlo con este parámetro. Este parámetro afectará el comportamiento del Dynamic Link solo en iOS.
Parámetros de metaetiqueta social
establecer título El título que se utilizará cuando el enlace dinámico se comparte en una publicación social.
conjuntoDescripción La descripción que se utilizará cuando el enlace dinámico se comparte en una publicación social.
establecerUrlImagen La URL de una imagen relacionada con este enlace. La imagen debe tener al menos 300x200 px y menos de 300 KB.
Parámetros de GoogleAnalytics
establecer fuente
conjuntoMedio
establecercampaña
establecer término
establecer contenido
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 enlace.
ItunesConnectAnalyticsParámetros
establecerProviderToken
establecerAffiliateToken
establecerCampaignToken
Parámetros de análisis de iTunes Connect. Estos parámetros ( pt , at , ct ) se pasan a la App Store.

Para acortar un enlace dinámico largo, especifique la URL del enlace dinámico usando setLongLink en lugar de configurar parámetros con los otros métodos del constructor:

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