Introducció
Els enllaços dinàmics de Firebase són URL intel·ligents que permeten una experiència d'usuari fluida en diverses plataformes. Aquests enllaços poden dirigir els usuaris a contingut específic dins de la teva aplicació, fins i tot si l'usuari encara no ha instal·lat l'aplicació. Quan un usuari fa clic en un enllaç dinàmic, se'l redirigeix a la botiga d'aplicacions per descarregar l'aplicació, i després de la instal·lació, l'usuari és redirigit automàticament al contingut específic.
Característiques clau
- Profunditat de vinculació: Redirigeix els usuaris a contingut específic dins de l'aplicació.
- Compatibilitat multiplataforma: Funciona tant en Android com en iOS.
- Persistència de dades: Manté les dades a través de la instal·lació de l'aplicació.
- Personalització: Personalitza l'experiència d'usuari amb paràmetres específics.
Configuració d'enllaços dinàmics
Pas 1: Configuració inicial a la consola de Firebase
- Accedeix a la consola de Firebase.
- Selecciona el teu projecte.
- Navega a la secció "Enllaços dinàmics".
- Fes clic a "Comença".
- Configura el domini per als enllaços dinàmics. Pots utilitzar un domini personalitzat o el domini proporcionat per Firebase.
Pas 2: Integració a l'aplicació
Android
-
Afegeix les dependències necessàries al teu
build.gradle
:dependencies { implementation 'com.google.firebase:firebase-dynamic-links:19.1.0' }
-
Configura l'intent filter al teu
AndroidManifest.xml
:<activity android:name=".MainActivity"> <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.page.link" android:scheme="https" /> </intent-filter> </activity>
-
Gestiona l'enllaç dinàmic a la teva activitat:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FirebaseDynamicLinks.getInstance() .getDynamicLink(getIntent()) .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() { @Override public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { Uri deepLink = null; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); } // Gestiona l'enllaç profund aquí } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "getDynamicLink:onFailure", e); } }); }
iOS
-
Afegeix les dependències necessàries al teu
Podfile
:pod 'Firebase/DynamicLinks'
-
Configura l'URL scheme al teu
Info.plist
:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>com.example.ios</string> </array> </dict> </array>
-
Gestiona l'enllaç dinàmic a la teva aplicació:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard let incomingURL = userActivity.webpageURL else { return false } let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { (dynamiclink, error) in guard error == nil else { print("Error handling dynamic link: \\(error!.localizedDescription)") return } if let dynamicLink = dynamiclink, let url = dynamicLink.url { // Gestiona l'enllaç profund aquí } } return linkHandled }
Creació d'enllaços dinàmics
Utilitzant la consola de Firebase
- Accedeix a la consola de Firebase.
- Selecciona el teu projecte.
- Navega a la secció "Enllaços dinàmics".
- Fes clic a "Nou enllaç dinàmic".
- Configura l'URL de l'enllaç dinàmic.
- Defineix els paràmetres de l'enllaç (com el contingut profund, la campanya, etc.).
- Genera l'enllaç.
Utilitzant l'API
Exemple en Android
Uri dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink() .setLink(Uri.parse("https://www.example.com/")) .setDomainUriPrefix("https://example.page.link") .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build()) .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build()) .buildDynamicLink() .getUri(); Log.d(TAG, "Dynamic Link: " + dynamicLink.toString());
Exemple en iOS
let link = URL(string: "https://www.example.com/")! let dynamicLinksDomainURIPrefix = "https://example.page.link" let components = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPrefix) let iOSParams = DynamicLinkIOSParameters(bundleID: "com.example.ios") components.iOSParameters = iOSParams let androidParams = DynamicLinkAndroidParameters(packageName: "com.example.android") components.androidParameters = androidParams let dynamicLink = components.url print("Dynamic Link: \(dynamicLink?.absoluteString ?? "")")
Exercicis pràctics
Exercici 1: Crear un enllaç dinàmic bàsic
- Configura un enllaç dinàmic a la consola de Firebase que redirigeixi a una pàgina específica de la teva aplicació.
- Implementa la gestió de l'enllaç dinàmic a la teva aplicació Android o iOS.
- Prova l'enllaç per assegurar-te que redirigeix correctament al contingut específic.
Exercici 2: Personalitzar l'enllaç dinàmic
- Crea un enllaç dinàmic amb paràmetres personalitzats (com campanyes de màrqueting).
- Implementa la lògica per gestionar aquests paràmetres a la teva aplicació.
- Prova l'enllaç per assegurar-te que els paràmetres es gestionen correctament.
Solucions
Solució a l'Exercici 1
Android
-
Configura l'enllaç dinàmic a la consola de Firebase.
-
Implementa la gestió de l'enllaç dinàmic:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FirebaseDynamicLinks.getInstance() .getDynamicLink(getIntent()) .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() { @Override public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { Uri deepLink = null; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); } if (deepLink != null) { // Redirigeix a la pàgina específica Intent intent = new Intent(MainActivity.this, SpecificPageActivity.class); startActivity(intent); } } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "getDynamicLink:onFailure", e); } }); }
iOS
-
Configura l'enllaç dinàmic a la consola de Firebase.
-
Implementa la gestió de l'enllaç dinàmic:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard let incomingURL = userActivity.webpageURL else { return false } let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { (dynamiclink, error) in guard error == nil else { print("Error handling dynamic link: \\(error!.localizedDescription)") return } if let dynamicLink = dynamiclink, let url = dynamicLink.url { // Redirigeix a la pàgina específica let storyboard = UIStoryboard(name: "Main", bundle: nil) let specificPageVC = storyboard.instantiateViewController(withIdentifier: "SpecificPageViewController") self.window?.rootViewController?.present(specificPageVC, animated: true, completion: nil) } } return linkHandled }
Solució a l'Exercici 2
Android
-
Crea un enllaç dinàmic amb paràmetres personalitzats.
-
Implementa la lògica per gestionar aquests paràmetres:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FirebaseDynamicLinks.getInstance() .getDynamicLink(getIntent()) .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() { @Override public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { Uri deepLink = null; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); } if (deepLink != null) { String campaign = deepLink.getQueryParameter("campaign"); if (campaign != null) { // Gestiona la campanya Log.d(TAG, "Campanya: " + campaign); } } } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "getDynamicLink:onFailure", e); } }); }
iOS
-
Crea un enllaç dinàmic amb paràmetres personalitzats.
-
Implementa la lògica per gestionar aquests paràmetres:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard let incomingURL = userActivity.webpageURL else { return false } let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { (dynamiclink, error) in guard error == nil else { print("Error handling dynamic link: \\(error!.localizedDescription)") return } if let dynamicLink = dynamiclink, let url = dynamicLink.url { let components = URLComponents(url: url, resolvingAgainstBaseURL: false) let campaign = components?.queryItems?.first(where: { $0.name == "campaign" })?.value if let campaign = campaign { // Gestiona la campanya print("Campanya: \\(campaign)") } } } return linkHandled }
Conclusió
Els enllaços dinàmics de Firebase són una eina poderosa per millorar l'experiència d'usuari i augmentar la retenció d'usuaris a través de la vinculació profunda. Amb la configuració adequada i la integració a la teva aplicació, pots dirigir els usuaris a contingut específic, fins i tot si encara no han instal·lat l'aplicació. Els exercicis pràctics proporcionats t'ajudaran a comprendre millor com crear i gestionar enllaços dinàmics, així com personalitzar-los per a diferents campanyes i necessitats.
Curs de Firebase
Mòdul 1: Introducció a Firebase
Mòdul 2: Autenticació de Firebase
- Introducció a l'autenticació de Firebase
- Autenticació amb correu electrònic i contrasenya
- Autenticació amb xarxes socials
- Gestió d'usuaris
Mòdul 3: Base de dades en temps real de Firebase
- Introducció a la base de dades en temps real
- Lectura i escriptura de dades
- Estructura de dades i regles de seguretat
- Capacitats fora de línia
Mòdul 4: Cloud Firestore
- Introducció a Cloud Firestore
- Model de dades de Firestore
- Operacions CRUD
- Consultes avançades
- Regles de seguretat
Mòdul 5: Emmagatzematge de Firebase
- Introducció a l'emmagatzematge de Firebase
- Carregar fitxers
- Descarregar fitxers
- Metadades de fitxers i seguretat
Mòdul 6: Missatgeria en el núvol de Firebase
- Introducció a la missatgeria en el núvol
- Enviar notificacions
- Gestionar notificacions
- Funcions avançades de missatgeria
Mòdul 7: Analítica de Firebase
Mòdul 8: Funcions de Firebase
Mòdul 9: Monitoratge del rendiment de Firebase
- Introducció al monitoratge del rendiment
- Configuració del monitoratge del rendiment
- Analitzar dades de rendiment