Para recibir los vínculos dinámicos de Firebase que creaste, debes incluir el SDK de Dynamic Links en tu app y llamar al método FirebaseDynamicLinks.getDynamicLink()
cuando la app se cargue a fin de obtener los datos que se pasaron en el vínculo dinámico.
Configura Firebase y el SDK de Dynamic Links
Instala e inicializa los SDK de Firebase para Flutter si aún no lo has hecho.
Desde el directorio raíz de tu proyecto de Flutter, ejecuta el siguiente comando para instalar el complemento de Dynamic Links:
flutter pub add firebase_dynamic_links
Si estás creando una app para Android, abre la página Configuración del proyecto de Firebase console y asegúrate de haber especificado tu clave de firma SHA-1. Si usas vínculos de apps, también debes especificar la clave SHA-256.
Integración de plataformas
Completa los siguientes pasos de integración de las plataformas para las que creas tu app.
Android
En Android, debes agregar un nuevo filtro de intents para captar vínculos directos del dominio, ya que el
vínculo dinámico redireccionará a tu dominio si la app está instalada. Esto es obligatorio para que tu app
reciba los datos del vínculo dinámico después de instalarla o actualizarla desde Play Store y de presionar
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 directo al esquema y al host que especificaste, tu app inicia la actividad con este filtro de intents para administrar el vínculo.
El siguiente paso es asegurarte de que la huella digital SHA-256 del certificado de firma esté registrada en Firebase console para la app. Puedes encontrar más detalles sobre cómo recuperar tu huella digital SHA-256 en la página Authenticating Your Client.
Plataformas de Apple
Crea una cuenta de desarrollador de Apple si aún no tienes una.
En la página Configuración del proyecto de Firebase console, asegúrate de que la app para iOS esté configurada correctamente con el ID de App Store y el ID de equipo.
En el sitio para desarrolladores de Apple, crea un perfil de aprovisionamiento para tu app con la función de dominio asociado habilitada.
En Xcode, haz lo siguiente:
Abre tu app debajo del encabezado TARGETS.
En la página Signing & Capabilities, asegúrate de que tu equipo esté registrado y de que el perfil de aprovisionamiento esté configurado.
En la página Signing & Capabilities, habilita Associated Domains y agrega lo siguiente a la lista de dominios asociados (reemplaza example por tu dominio):
applinks:example.page.link
En la página Info, agrega un tipo de URL a tu proyecto. En el campo URL Schemes, ingresa el ID del paquete de tu app. (El identificador puede ser
Bundle ID
o lo que desees).Si configuraste un dominio personalizado para tu proyecto de Firebase, agrega el prefijo de URL del vínculo dinámico al archivo
Info.plist
de tu proyecto de iOS con la claveFirebaseDynamicLinksCustomDomains
.<?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>
Opcional: Impide que el SDK de Dynamic Links use el portapapeles de iOS.
De forma predeterminada el SDK de Dynamic Links usa el portapapeles para mejorar la confiabilidad de los vínculos directos posteriores a la instalación. De esta manera, Dynamic Links puede garantizar que, cuando un usuario abra un vínculo dinámico, pero deba instalar tu app primero, pueda ir de inmediato al contenido vinculado original después de abrir la app por primera vez.
La desventaja de esta opción es que el uso del portapapeles activa una notificación en iOS 14 y versiones posteriores. Por lo tanto, si el portapapeles contiene la URL de un vínculo dinámico y los usuarios abren tu app por primera vez, verán una notificación de que la app accedió al portapapeles, lo que puede causar confusión.
Para inhabilitar este comportamiento, edita el archivo
Info.plist
del proyecto de Xcode y configura la claveFirebaseDeepLinkPasteboardRetrievalEnabled
comoNO
.
Controla vínculos directos
Para controlar un vínculo dinámico en tu aplicación, hay dos escenarios que requieren implementación.
Estado de cierre
Configura los siguientes métodos:
FirebaseDynamicLinks.getInitialLink
: Muestra unFuture<PendingDynamicLinkData?>
.FirebaseDynamicLinks.onLink
: Controlador de eventos que muestra unStream
que contiene unPendingDynamicLinkData?
.
Android siempre recibirá el vínculo a través de FirebaseDynamicLinks.getInitialLink
desde un estado de cierre,
pero no se garantiza que funcione en iOS. Por lo tanto, es conveniente configurarlas en el siguiente orden
para asegurarte de que tu aplicación reciba el vínculo:
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 la aplicación, puedes verificar si un vínculo se controló 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 segundo plano/primer plano
Mientras la aplicación esté abierta o en segundo plano, usa el método get FirebaseDynamicLinks.onLink
:
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
Como alternativa, si deseas identificar si se usó un vínculo dinámico exacto para abrir la aplicación, pásalo al método getDynamicLink
:
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
Prueba un vínculo dinámico en la plataforma iOS
Para probar un vínculo dinámico en iOS, debes usar un dispositivo real. También deberás ejecutar la app en el modo de lanzamiento (es decir, flutter run --release
)
si vas a probar un vínculo dinámico desde un estado finalizado de la app (es decir, que la app está cerrada).