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 la tua app viene caricata per ottenere i dati trasmessi nel Dynamic Link.
Configura Firebase e l'SDK di Dynamic Links
Installa e inizializza gli SDK Firebase per Flutter se non lo hai già fatto.
Dalla directory principale del tuo progetto Flutter, esegui il comando seguente per installare il plug-in Dynamic Links:
flutter pub add firebase_dynamic_links
Se stai creando un'app per Android, apri la pagina delle impostazioni del progetto della console Firebase e assicurati di aver specificato la chiave di firma SHA-1. Se utilizzi App Links, specifica anche la tua chiave SHA-256.
Integrazione della piattaforma
Completa i seguenti passaggi di integrazione della piattaforma per le piattaforme per le quali stai creando la tua app.
Androide
Su Android, devi aggiungere un nuovo filtro intent per catturare i link diretti del tuo dominio, poiché Dynamic Link reindirizzerà al tuo dominio se la tua app è installata. Questo è necessario affinché la tua app riceva i dati di Dynamic Link dopo che è stata installata/aggiornata dal Play Store e si tocca il pulsante Continua. In 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 specificati, la tua app avvierà l'attività con questo filtro intent per gestire il collegamento.
Il passaggio successivo consiste nell'assicurarsi 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 delle impostazioni del progetto della console Firebase, assicurati che l'app iOS sia configurata correttamente con l'ID App Store e l'ID team.
Sul 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 example con il tuo dominio):
applinks:example.page.link
Nella pagina Info, aggiungi un tipo di URL al tuo progetto. Imposta il campo Schemi URL sull'ID pacchetto della tua app. (L'identificatore può essere
Bundle ID
o qualsiasi altra cosa desideri.)Se hai configurato un dominio personalizzato per il tuo progetto Firebase, aggiungi il prefisso dell'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'uso del tavolo di montaggio iOS da parte dell'SDK di Dynamic Links.
Per impostazione predefinita, l'SDK di Dynamic Links utilizza il tavolo di montaggio per migliorare l'affidabilità dei deep link post-installazione. Utilizzando il tavolo di montaggio, Dynamic Links può garantire che quando un utente apre un collegamento dinamico ma deve prima installare la tua app, l'utente possa andare immediatamente al contenuto collegato originale quando apre l'app per la prima volta dopo l'installazione.
Lo svantaggio di questo è che l'uso del tavolo di montaggio attiva una notifica su iOS 14 e versioni successive. Pertanto, la prima volta che gli utenti aprono la tua app, se il tavolo di montaggio contiene un URL di collegamento dinamico, vedranno una notifica che la tua app ha eseguito l'accesso al tavolo di montaggio, il che può causare confusione.
Per disabilitare questo comportamento, modifica il file
Info.plist
del progetto Xcode e imposta la chiaveFirebaseDeepLinkPasteboardRetrievalEnabled
suNO
.
Gestisci i deep link
Per gestire un collegamento dinamico nell'applicazione, è necessario implementare due scenari.
Stato terminato
Impostare i seguenti metodi:
-
FirebaseDynamicLinks.getInitialLink
: restituisceFuture<PendingDynamicLinkData?>
-
FirebaseDynamicLinks.onLink
- gestore di eventi che restituisce unStream
contenente unPendingDynamicLinkData?
Android riceverà sempre il collegamento tramite FirebaseDynamicLinks.getInitialLink
da uno stato terminato, ma su iOS non è garantito. Pertanto, vale la pena impostarli 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);
}
Sfondo / Stato in 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 collegamento dinamico 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));
Test di un collegamento dinamico su piattaforma iOS
Per testare un collegamento dinamico su iOS, è necessario utilizzare un dispositivo reale. Sarà inoltre necessario eseguire l'app in modalità di rilascio (ovvero flutter run --release
.), se si esegue il test di un collegamento dinamico da uno stato dell'app terminato (ovvero l'app è stata chiusa con il dito).