Crear enlaces dinámicos en iOS

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

Requisitos previos

Antes de comenzar, asegúrese de agregar Firebase a su proyecto de iOS .

Utilice Swift Package Manager para instalar y administrar las dependencias de Firebase.

  1. En Xcode, con el proyecto de su aplicación abierto, navegue hasta Archivo > Agregar paquetes .
  2. Cuando se le solicite, agregue el repositorio SDK de las plataformas Firebase Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Elija la biblioteca de enlaces dinámicos.
  5. Agregue el indicador -ObjC a la sección Otros indicadores del vinculador de la configuración de compilación de su objetivo.
  6. 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. Puede seleccionar la biblioteca sin colección IDFA o con colección IDFA.
  7. Cuando termine, Xcode comenzará automáticamente a resolver y descargar sus dependencias en segundo plano.

Ahora, realice algunos pasos de configuración:

  1. En Firebase console, abre la sección Enlaces dinámicos .
  2. Si aún no ha aceptado los términos de servicio y no ha configurado un prefijo URI para sus vínculos dinámicos, hágalo cuando se le solicite.

    Si ya tiene un prefijo URI de Dynamic Links, anótelo. Debe proporcionarlo cuando cree vínculos dinámicos mediante programación.

  3. 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 .
  4. Asegúrese de que el ID de la App Store de su aplicación y el prefijo de su ID de aplicación estén especificados en la configuración de su aplicación. Para ver y editar la configuración de tu aplicación, ve a la página de configuración de tu proyecto de Firebase y selecciona tu aplicación de iOS.

    Confirme que su proyecto de Firebase esté configurado correctamente para usar Dynamic Links en su aplicación de iOS abriendo el archivo apple-app-site-association alojado en su dominio de Dynamic Links. Firebase entregará el archivo apple-app-site-association desde la raíz del dominio, así como el subdirectorio .well-known . Por ejemplo:

        https://example.com/apple-app-site-association
        https://example.com/.well-known/apple-app-site-association
        

    Si su aplicación está conectada, el archivo apple-app-site-association contiene una referencia al prefijo de ID de la aplicación y al ID del paquete de su aplicación. Por ejemplo:

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    Si la propiedad details está vacía, verifique que haya especificado el prefijo de ID de su aplicación. Tenga en cuenta que el prefijo de ID de su aplicación puede no ser el mismo que el ID de su equipo.

Agrega Firebase a tu aplicación

  1. Importe el módulo FirebaseCore en su UIApplicationDelegate , así como cualquier otro módulo de Firebase que utilice el delegado de su aplicación. Por ejemplo, para usar Cloud Firestore y autenticación:

    Interfaz de usuario rápida

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Rápido

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    C objetivo

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Configure una instancia compartida FirebaseApp en el método application(_:didFinishLaunchingWithOptions:) del delegado de su aplicación:

    Interfaz de usuario rápida

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Rápido

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    C objetivo

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Si está utilizando SwiftUI, debe crear un delegado de aplicación y adjuntarlo a su estructura App mediante UIApplicationDelegateAdaptor o NSApplicationDelegateAdaptor . También debes desactivar el cambio de delegados de aplicaciones. Para obtener más información, consulte las instrucciones de SwiftUI .

    Interfaz de usuario rápida

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

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.

Utilice la API del constructor de iOS

Puede utilizar la API de iOS Builder para crear vínculos dinámicos a partir de parámetros o para acortar un vínculo dinámico largo.

Para crear un vínculo dinámico, cree un nuevo objeto DynamicLinkComponents y especifique los parámetros del vínculo dinámico configurando las propiedades correspondientes del objeto. Luego, obtenga el enlace largo de la propiedad url del objeto u obtenga el enlace corto llamando shorten() .

El siguiente ejemplo mínimo crea un enlace dinámico largo a https://www.example.com/my-page que se abre con su aplicación iOS en iOS y la aplicación com.example.android en Android:

Rápido

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix)
linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

C objetivo

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domainURIPrefix:dynamicLinksDomainURIPrefix];
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];

NSLog(@"The long URL is: %@", linkBuilder.url);

Para crear un enlace dinámico corto, cree un DynamicLinkComponents de la misma manera y luego llame a shorten() .

Crear un enlace corto requiere una llamada de red, por lo que en lugar de devolver el enlace directamente, shorten() acepta un controlador de finalización, al que se llama cuando se completa la solicitud. Por ejemplo:

Rápido

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

C objetivo

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

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 configurando la dynamicLinkComponentsOptions :

Rápido

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
linkBuilder.options = DynamicLinkComponentsOptions()
linkBuilder.options.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

C objetivo

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init];
linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort;
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

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:

Rápido

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix)

linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.iOSParameters.appStoreID = "123456789"
linkBuilder.iOSParameters.minimumAppVersion = "1.2.3"

linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
linkBuilder.androidParameters.minimumVersion = 123

linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut",
                                                                       medium: "social",
                                                                       campaign: "example-promo")

linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters()
linkBuilder.iTunesConnectParameters.providerToken = "123456"
linkBuilder.iTunesConnectParameters.campaignToken = "example-promo"

linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link"
linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!"
linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg"

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

C objetivo

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domainURIPrefix:dynamicLinksDomainURIPrefix];

linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.iOSParameters.appStoreID = @"123456789";
linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3";

linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];
linkBuilder.androidParameters.minimumVersion = 123;

linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc]
                                   initWithSource:@"orkut"
                                           medium:@"social"
                                         campaign:@"example-promo"];

linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init];
linkBuilder.iTunesConnectParameters.providerToken = @"123456";
linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo";

linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link";
linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!";
linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg";

NSLog(@"The long URL is: %@", linkBuilder.url);

Puede configurar parámetros de vínculo dinámico con los siguientes objetos y propiedades:

Componentes de DynamicLink
enlace

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.

dominioURIPrefijo 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
Parámetros de DynamicLinkAndroid
URL alternativa 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.
versión mí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.
Parámetros DynamicLinkIOS
ID de tienda de aplicaciones 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.
URL alternativa 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.
esquema personalizado El esquema de URL personalizado de su aplicación, si se define como algo distinto al ID del paquete de su aplicación
URL alternativa para iPad 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.
iPadBundleID 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.
versión mínima de la aplicación 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 DynamicLinkNavigationInfo
ForceRedirectEnabled 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 DynamicLinkSocialMetaTag
título El título que se utilizará cuando el enlace dinámico se comparte en una publicación social.
descripciónTexto La descripción que se utilizará cuando el enlace dinámico se comparte en una publicación social.
URL de la imagen La URL de una imagen relacionada con este enlace. La imagen debe tener al menos 300x200 px y menos de 300 KB.
DynamicLinkGoogleAnalyticsParámetros
fuente
medio
campaña
término
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.
DynamicLinkItunesConnectAnalyticsParámetros
proveedorToken
token de afiliado
token de campaña
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, pase el enlace dinámico largo a shortenURL(url:options:) junto con un objeto DynamicLinkComponentsOptions si desea generar un enlace con un sufijo corto:

Rápido

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

C objetivo

Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
[FIRDynamicLinkComponents shortenURL:longLinkUrl
                             options:nil
                          completion:^(NSURL * _Nullable shortURL,
                                       NSArray<NSString *> * _Nullable warnings,
                                       NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];

De forma predeterminada, Dynamic Links utiliza el identificador de paquete de su aplicación como el esquema de URL necesario para abrir su aplicación. Recomendamos permanecer con este valor predeterminado para mantener su implementación simple.

Sin embargo, es posible que los desarrolladores que ya utilizan un esquema de URL personalizado para otros fines deseen utilizar este mismo esquema de URL personalizado para sus vínculos dinámicos. Si se encuentra en esta situación, puede especificar un esquema de URL diferente para sus enlaces dinámicos de Firebase siguiendo estos pasos:

  1. Al configurar su aplicación, asegúrese de especificar el esquema de URL predeterminado que usará su aplicación antes de configurar su instancia compartida FirebaseApp :

    Rápido

    Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication
                       .LaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = customURLScheme
      FirebaseApp.configure()
    
      return true
    }
    

    C objetivo

    Nota: Este producto Firebase no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
      [FIRApp configure];
    
      return YES;
    }
  2. Siempre que cree un enlace dinámico, deberá especificar el esquema de URL personalizado que utiliza su aplicación. Puede hacer esto a través de la consola de Firebase, configurando customScheme en la API Builder, especificando el parámetro ius en su URL o enviando el parámetro iosCustomScheme a la API REST.

Próximos pasos

Ahora que ha creado vínculos dinámicos, debe configurar su aplicación para recibir vínculos dinámicos y enviar a los usuarios al lugar correcto en su aplicación después de que un usuario los abra.

Para recibir vínculos dinámicos en su aplicación, consulte la documentación para iOS , Android , C++ y Unity .