Reciba enlaces dinámicos de Firebase en una aplicación Flutter

Para recibir los Firebase Dynamic Links que creó , debe incluir el SDK de Dynamic Links en su aplicación y llamar al método FirebaseDynamicLinks.getDynamicLink() cuando su aplicación se carga para obtener los datos pasados ​​en el Dynamic Link.

  1. Instala e inicializa los SDK de Firebase para Flutter si aún no lo has hecho.

  2. Desde el directorio raíz de su proyecto Flutter, ejecute el siguiente comando para instalar el complemento Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. Si está creando una aplicación para Android, abra la página de configuración del proyecto de Firebase console y asegúrese de haber especificado su clave de firma SHA-1. Si utiliza App Links, especifique también su clave SHA-256.

Integración de plataforma

Complete los siguientes pasos de integración de plataformas para las plataformas para las que está creando su aplicación.

Androide

En Android, debes agregar un nuevo filtro de intención para capturar enlaces profundos de tu dominio, ya que el enlace dinámico redirigirá a tu dominio si tu aplicación está instalada. Esto es necesario para que su aplicación reciba los datos de Dynamic Link después de instalarla/actualizarla desde Play Store y tocar el botón Continuar. En AndroidManifest.xml :

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

Cuando los usuarios abren un vínculo dinámico con un vínculo profundo al esquema y al host que usted especifica, su aplicación iniciará la actividad con este filtro de intención para manejar el vínculo.

El siguiente paso es garantizar que la huella digital SHA-256 del certificado de firma esté registrada en la consola Firebase de la aplicación. Puede encontrar más detalles sobre cómo recuperar su huella digital SHA-256 en la página Autenticar a su cliente .

plataformas de manzana

  1. Cree una cuenta de desarrollador de Apple si aún no tiene una.

  2. En la página de configuración del proyecto de Firebase console, asegúrese de que su aplicación iOS esté configurada correctamente con su ID de App Store y su ID de equipo.

  3. En el sitio de desarrollador de Apple, cree un perfil de aprovisionamiento para su aplicación con la capacidad de dominio asociado habilitada.

  4. En Xcode, haga lo siguiente:

    1. Abra su aplicación bajo el encabezado OBJETIVOS .

    2. En la página Firma y capacidades, asegúrese de que su equipo esté registrado y que su perfil de aprovisionamiento esté configurado.

    3. En la página Firma y capacidades, habilite Dominios asociados y agregue lo siguiente a la lista de Dominios asociados (reemplace el ejemplo con su dominio):

      applinks:example.page.link
      
    4. En la página Información, agregue un tipo de URL a su proyecto. Establezca el campo Esquemas de URL en el ID del paquete de su aplicación. (El Identificador puede ser Bundle ID o lo que desee).

    5. Si ha configurado un dominio personalizado para su proyecto de Firebase, agregue el prefijo de URL del vínculo dinámico en el archivo Info.plist de su proyecto de iOS usando la clave FirebaseDynamicLinksCustomDomains .

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>FirebaseDynamicLinksCustomDomains</key>
      <array>
          <string>https://custom.domain.io/path1</string>
          <string>https://custom.domain.io/path2</string>
      </array>
      
      ...other settings
      
      </dict>
      </plist>
      
    6. 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 de enlace dinámico, 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 .

Para manejar un vínculo dinámico en su aplicación, es necesario implementar dos escenarios.

Estado terminado

Configure los siguientes métodos:

  1. FirebaseDynamicLinks.getInitialLink : devuelve un Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink : ¿controlador de eventos que devuelve una Stream que contiene un PendingDynamicLinkData?

Android siempre recibirá el enlace a través de FirebaseDynamicLinks.getInitialLink desde un estado terminado, pero en iOS no está garantizado. Por lo tanto, vale la pena configurarlos en el siguiente orden para garantizar que su aplicación reciba el enlace:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Check if you received the link via `getInitialLink` first
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  if (initialLink != null) {
    final Uri deepLink = initialLink.link;
    // Example of using the dynamic link to push the user to a different screen
    Navigator.pushNamed(context, deepLink.path);
  }

  FirebaseDynamicLinks.instance.onLink.listen(
        (pendingDynamicLinkData) {
          // Set up the `onLink` event listener next as it may be received here
          if (pendingDynamicLinkData != null) {
            final Uri deepLink = pendingDynamicLinkData.link;
            // Example of using the dynamic link to push the user to a different screen
            Navigator.pushNamed(context, deepLink.path);
          }
        },
      );

  runApp(MyApp(initialLink));
}

Dentro de la lógica de su aplicación, puede verificar si se manejó un enlace y realizar una acción, por ejemplo:

if (initialLink != null) {
  final Uri deepLink = initialLink.link;
  // Example of using the dynamic link to push the user to a different screen
  Navigator.pushNamed(context, deepLink.path);
}

Estado de fondo/primer plano

Mientras la aplicación está abierta o en segundo plano, utiliza el captador FirebaseDynamicLinks.onLink :

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});

Alternativamente, si desea identificar si se utilizó un vínculo dinámico exacto para abrir la aplicación, páselo al método getDynamicLink :

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

Para probar un enlace dinámico en iOS, es necesario utilizar un dispositivo real. También deberá ejecutar la aplicación en modo de lanzamiento (es decir, flutter run --release ), si prueba un enlace dinámico desde un estado de aplicación terminada (es decir, la aplicación se ha cerrado).