Ricevi Firebase Dynamic Links in un'app Flutter

Per ricevere i Firebase Dynamic Links che hai creato, devi includere l'SDK di Dynamic Links nella tua app e chiamare il metodo FirebaseDynamicLinks.getDynamicLink() quando l'app viene caricata per recuperare i dati trasmessi nel link dinamico.

  1. Installa e inizializza gli SDK Firebase per Flutter, se non l'hai ancora fatto.

  2. Dalla directory principale del progetto Flutter, esegui il seguente comando per installare il plug-in Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. Se stai creando un'app per Android, apri la pagina Impostazioni progetto della console Firebase e assicurati di aver specificato la chiave di firma SHA-1. Se utilizzi i link 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.

Android

Su Android, devi aggiungere un nuovo filtro per intent per intercettare i link diretti del tuo dominio, poiché il Dynamic Link reindirizzerà al tuo dominio se la tua app è installata. Questo è necessario affinché la tua app riceva i dati dei link dinamici dopo l'installazione/l'aggiornamento dal Play Store e dopo aver toccato 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 link dinamico con un link diretto allo schema e all'host specificati, l'app avvia l'attività con questo filtro per intent per gestire il link.

Il passaggio successivo consiste nell'assicurarsi che l'impronta SHA-256 del certificato di firma sia registrata nella console Firebase per l'app. Puoi trovare maggiori dettagli su come recuperare l'impronta SHA-256 nella pagina Autenticazione del client.

Piattaforme Apple

  1. Crea un account sviluppatore Apple se non ne hai già uno.

  2. Nella pagina Impostazioni progetto della console Firebase, assicurati che la tua app per iOS sia configurata correttamente con l'ID App Store e l'ID team.

  3. Sul sito Apple Developer, crea un profilo di provisioning per la tua app con la funzionalità Domini associati abilitata.

  4. In Xcode:

    1. Apri l'app sotto l'intestazione TARGET.

    2. Nella pagina Firma e funzionalità, assicurati che il tuo team sia registrato e che il tuo profilo di provisioning sia impostato.

    3. Nella pagina Firma e funzionalità, attiva Domini associati e aggiungi quanto segue all'elenco Domini associati (sostituisci l'esempio con il tuo dominio):

      applinks:example.page.link
      
    4. 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 quello che preferisci.

    5. Se hai configurato un dominio personalizzato per il tuo progetto Firebase, aggiungi il prefisso URL di Dynamic Link al file Info.plist del tuo progetto iOS utilizzando la chiave 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. (Facoltativo) Disattiva l'utilizzo della funzionalità Appunti di iOS da parte dell'SDK di Dynamic Links.

      Per impostazione predefinita, l'SDK Dynamic Links utilizza gli appunti per migliorare l'affidabilità dei link diretti post-installazione. Utilizzando gli appunti, i link dinamici possono garantire che, quando un utente apre un link dinamico ma deve prima installare l'app, possa accedere immediatamente ai contenuti collegati originali quando apre l'app per la prima volta dopo l'installazione.

      Lo svantaggio è che l'utilizzo degli appunti attiva una notifica su iOS 14 e versioni successive. Pertanto, la prima volta che gli utenti aprono la tua app, se la clipboard contiene un URL di link dinamico, vedranno una notifica che indica che la tua app ha eseguito l'accesso alla clipboard, il che può causare confusione.

      Per disattivare questo comportamento, modifica il file Info.plist del progetto Xcode e imposta la chiave FirebaseDeepLinkPasteboardRetrievalEnabled su NO.

Per gestire un Dynamic Link nella tua applicazione, è necessario implementare due scenari.

Stato Terminato

Configura i seguenti metodi:

  1. FirebaseDynamicLinks.getInitialLink - restituisce un Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink: gestore di eventi che restituisce un Stream contenente un PendingDynamicLinkData?

Android riceverà sempre il link tramite FirebaseDynamicLinks.getInitialLink da uno stato di terminazione, ma su iOS non è garantito. Pertanto, è consigliabile configurarli entrambi nel seguente ordine per garantire che l'applicazione riceva il link:

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, puoi quindi verificare se un link è 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 in background / 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 vuoi identificare se è stato utilizzato un link dinamico esatto per aprire l'applicazione, passalo al metodo getDynamicLink:

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

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

Per testare un link dinamico su iOS, è necessario utilizzare un dispositivo reale. Se testi un link dinamico da uno stato dell'app terminato (ovvero l'app è stata chiusa scorrendo), devi anche eseguire l'app in modalità di rilascio (ovvero flutter run --release.).