Per ricevere i Firebase Dynamic Links che hai creato , devi includere l'SDK Dynamic Links nella tua app e chiamare il metodo FirebaseDynamicLinks.getDynamicLink()
quando l'app viene caricata per ottenere i dati passati nel Dynamic Link.
Configura Firebase e Dynamic Links SDK
Installa e inizializza gli SDK Firebase per Flutter se non lo hai già fatto.
Dalla directory root del tuo progetto Flutter, esegui il comando seguente per installare il plugin Dynamic Links:
flutter pub add firebase_dynamic_links
Se stai creando un'app Android, apri la pagina Impostazioni progetto della console Firebase e assicurati di aver specificato la chiave di firma SHA-1. Se utilizzi i collegamenti alle app, specifica anche la chiave SHA-256.
Integrazione della piattaforma
Completa i seguenti passaggi di integrazione della piattaforma per le piattaforme per cui stai creando la tua app.
Androide
Su Android, devi aggiungere un nuovo filtro intent per catturare i link diretti del tuo dominio, poiché il collegamento dinamico reindirizzerà al tuo dominio se la tua app è installata. Ciò è necessario affinché la tua app riceva i dati di Dynamic Link dopo essere stata installata/aggiornata dal Play Store e dopo aver toccato il pulsante Continua. Nel 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>
Quando gli utenti aprono un collegamento dinamico con un collegamento diretto allo schema e all'host specificato, la tua app avvierà l'attività con questo filtro di intenti per gestire il collegamento.
Il passaggio successivo è garantire che l'impronta digitale SHA-256 del certificato di firma sia registrata nella console Firebase per l'app. Puoi trovare maggiori dettagli su come recuperare la tua impronta digitale SHA-256 nella pagina Autenticazione del tuo client .
Piattaforme Apple
Crea un account sviluppatore Apple se non ne hai già uno.
Nella pagina Impostazioni progetto della console Firebase, assicurati che la tua app iOS sia configurata correttamente con l'ID App Store e l'ID team.
Nel sito Apple Developer, crea un profilo di provisioning per la tua app con la funzionalità Dominio associato abilitata.
In Xcode, procedi come segue:
Apri la tua app sotto l'intestazione TARGETS .
Nella pagina Firma e funzionalità, assicurati che il tuo team sia registrato e che il tuo profilo di provisioning sia impostato.
Nella pagina Firma e funzionalità, abilita Domini associati e aggiungi quanto segue all'elenco Domini associati (sostituisci l'esempio con il tuo dominio):
applinks:example.page.link
Nella pagina Informazioni, aggiungi un tipo di URL al tuo progetto. Imposta il campo Schemi URL sull'ID bundle della tua app. (L'identificatore può essere
Bundle ID
o qualunque cosa desideri.)Se hai impostato un dominio personalizzato per il tuo progetto Firebase, aggiungi il prefisso URL del collegamento dinamico nel file
Info.plist
del tuo progetto iOS utilizzando la chiaveFirebaseDynamicLinksCustomDomains
.<?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>
Facoltativo: disabilitare l'utilizzo del pasteboard iOS da parte dell'SDK Dynamic Links.
Per impostazione predefinita, Dynamic Links SDK utilizza il pasteboard per migliorare l'affidabilità dei collegamenti diretti post-installazione. Utilizzando il pasteboard, Dynamic Links può garantire che quando un utente apre un Dynamic Link ma deve prima installare l'app, l'utente possa accedere immediatamente al contenuto collegato originale quando apre l'app per la prima volta dopo l'installazione.
Lo svantaggio è che l'uso del pasteboard attiva una notifica su iOS 14 e versioni successive. Pertanto, la prima volta che gli utenti aprono la tua app, se il pasteboard contiene un URL di collegamento dinamico, vedranno una notifica che informa che la tua app ha avuto accesso al pasteboard, il che può causare confusione.
Per disabilitare questo comportamento, modifica il file
Info.plist
del tuo progetto Xcode e imposta la chiaveFirebaseDeepLinkPasteboardRetrievalEnabled
suNO
.
Gestire i collegamenti diretti
Per gestire un collegamento dinamico nella tua applicazione, è necessario implementare due scenari.
Stato terminato
Imposta i seguenti metodi:
-
FirebaseDynamicLinks.getInitialLink
: restituisce unFuture<PendingDynamicLinkData?>
-
FirebaseDynamicLinks.onLink
- gestore eventi che restituisce unoStream
contenente unPendingDynamicLinkData?
Android riceverà sempre il collegamento tramite FirebaseDynamicLinks.getInitialLink
da uno stato terminato, ma su iOS non è garantito. Pertanto, vale la pena configurarli entrambi nel seguente ordine per garantire che la tua applicazione riceva il collegamento:
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));
}
All'interno della logica dell'applicazione è quindi possibile verificare se un collegamento è stato gestito ed eseguire un'azione, ad esempio:
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);
}
Stato di sfondo/primo piano
Mentre l'applicazione è aperta o in background, utilizza il getter FirebaseDynamicLinks.onLink
:
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
In alternativa, se desideri identificare se è stato utilizzato un Dynamic Link esatto per aprire l'applicazione, passalo invece al metodo getDynamicLink
:
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
Testare un collegamento dinamico sulla piattaforma iOS
Per testare un collegamento dinamico su iOS, è necessario utilizzare un dispositivo reale. Dovrai inoltre eseguire l'app in modalità di rilascio (ad esempio flutter run --release
.), se stai testando un collegamento dinamico da uno stato dell'app terminato (ad esempio l'app è stata chiusa con il cursore).