查看 2022 年 Google I/O 大会上介绍的 Firebase 新动态。了解详情

Ricevi collegamenti dinamici Firebase 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 la tua app viene caricata per ottenere i dati trasmessi nel Dynamic Link.

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

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

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

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

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

  3. Sul 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 example con il tuo dominio):

      applinks:example.page.link
      
    4. 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.)

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

Per gestire un collegamento dinamico nell'applicazione, è necessario implementare due scenari.

Stato terminato

Impostare i seguenti metodi:

  1. FirebaseDynamicLinks.getInitialLink : restituisce Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink - gestore di eventi che restituisce un 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 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));

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