Reciba enlaces dinámicos en iOS

Para recibir los Dynamic Links de Firebase que creó , debe incluir el SDK de Dynamic Links en su aplicación y llamar a los métodos handleUniversalLink: dynamicLinkFromCustomSchemeURL: cuando se carga la aplicación para obtener los datos pasados ​​en el Dynamic Link.

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 . Acepte los términos de servicio si se le solicita que lo haga.
  2. 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.

    Puedes confirmar que tu proyecto de Firebase está configurado correctamente para usar Dynamic Links en tu aplicación de iOS abriendo la siguiente URL:

    https://your_dynamic_links_domain/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":["NOT /_/*","/*"]}]}}

    Si el campo details está vacío, 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.

  3. Opcional : deshabilite el uso del SDK de Dynamic Links del portapapeles de iOS.

    De forma predeterminada, el SDK de Dynamic Links utiliza el portapapeles para mejorar la confiabilidad de los enlaces profundos posteriores a la instalación. Al usar el portapapeles, Dynamic Links puede garantizar que cuando un usuario abra un Dynamic Link pero primero necesite instalar su aplicación, el usuario pueda ir inmediatamente al contenido original vinculado cuando abra la aplicación por primera vez después de la instalación.

    La desventaja de esto es que el uso del portapapeles activa una notificación en iOS 14 y versiones posteriores. Entonces, la primera vez que los usuarios abren su aplicación, si el portapapeles contiene una URL, verán una notificación de que su aplicación accedió al portapapeles, lo que puede causar confusión.

    Para deshabilitar este comportamiento, edite el archivo Info.plist de su proyecto Xcode y establezca la clave FirebaseDeepLinkPasteboardRetrievalEnabled en NO .

  1. En la pestaña Información del proyecto Xcode de su aplicación, cree un nuevo tipo de URL para usarlo con enlaces dinámicos. Establezca el campo Identificador en un valor único y el campo del esquema de URL como su identificador de paquete, que es el esquema de URL predeterminado utilizado por Dynamic Links.
  2. En la pestaña Capacidades del proyecto Xcode de su aplicación, habilite Dominios asociados y agregue lo siguiente a la lista de Dominios asociados :
    applinks:your_dynamic_links_domain
  3. Si desea recibir Dynamic Links con un dominio totalmente personalizado , en el archivo Info.plist de su proyecto Xcode, cree una clave llamada FirebaseDynamicLinksCustomDomains y configúrela con los prefijos URL de Dynamic Links de su aplicación. Por ejemplo:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. 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;
    // ...
          
  5. 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];
  6. 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()
          }
        }
      }
    }
          
  7. A continuación, en el application:continueUserActivity:restorationHandler: :, maneje los enlaces recibidos como enlaces universales cuando la aplicación ya esté instalada:

    Rápido

    Nota: Este producto no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
    func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
      let handled = DynamicLinks.dynamicLinks()
        .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in
          // ...
        }
    
      return handled
    }
    

    C objetivo

    Nota: Este producto no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
    - (BOOL)application:(UIApplication *)application
    continueUserActivity:(nonnull NSUserActivity *)userActivity
     restorationHandler:
    #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0)
    (nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler {
    #else
        (nonnull void (^)(NSArray *_Nullable))restorationHandler {
    #endif  // __IPHONE_12_0
      BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
                                                              completion:^(FIRDynamicLink * _Nullable dynamicLink,
                                                                           NSError * _Nullable error) {
                                                                // ...
                                                              }];
      return handled;
    }
  8. Finalmente, en application:openURL:options: maneja los enlaces recibidos a través del esquema de URL personalizado de tu aplicación. Este método se llama cuando la aplicación se abre por primera vez después de la instalación.

    Si el vínculo dinámico no se encuentra en el primer inicio de su aplicación, se llamará a este método con la url del DynamicLink configurada en nil , lo que indica que el SDK no pudo encontrar un vínculo dinámico pendiente coincidente.

    Rápido

    Nota: Este producto no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
    @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
      return application(app, open: url,
                         sourceApplication: options[UIApplication.OpenURLOptionsKey
                           .sourceApplication] as? String,
                         annotation: "")
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
                     annotation: Any) -> Bool {
      if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
        // Handle the deep link. For example, show the deep-linked content or
        // apply a promotional offer to the user's account.
        // ...
        return true
      }
      return false
    }
    

    C objetivo

    Nota: Este producto no está disponible en dispositivos macOS, Mac Catalyst, tvOS o watchOS.
    - (BOOL)application:(UIApplication *)app
                openURL:(NSURL *)url
                options:(NSDictionary<NSString *, id> *)options {
      return [self application:app
                       openURL:url
             sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                    annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    }
    
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
      FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
    
      if (dynamicLink) {
        if (dynamicLink.url) {
          // Handle the deep link. For example, show the deep-linked content,
          // apply a promotional offer to the user's account or show customized onboarding view.
          // ...
        } else {
          // Dynamic link has empty deep link. This situation will happens if
          // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link,
          // but pending link is not available for this device/App combination.
          // At this point you may display default onboarding view.
        }
        return YES;
      }
      return NO;
    }