Ricevi Firebase Dynamic Link in un'app Flutter

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.

  1. Installa e inizializza gli SDK Firebase per Flutter se non lo hai già fatto.

  2. Dalla directory root del tuo progetto Flutter, esegui il comando seguente per installare il plugin Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. 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

  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 iOS sia configurata correttamente con l'ID App Store e l'ID team.

  3. Nel sito Apple Developer, crea un profilo di provisioning per la tua app con la funzionalità Dominio associato abilitata.

  4. In Xcode, procedi come segue:

    1. Apri la tua app sotto l'intestazione TARGETS .

    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à, abilita 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 qualunque cosa desideri.)

    5. 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 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: 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 chiave FirebaseDeepLinkPasteboardRetrievalEnabled su NO .

Per gestire un collegamento dinamico nella tua applicazione, è necessario implementare due scenari.

Stato terminato

Imposta i seguenti metodi:

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

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));

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).