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

Ricevi collegamenti dinamici Firebase in un'app Flutter

Per ricevere i collegamenti dinamici Firebase che hai creato , devi includere l'SDK di collegamenti dinamici nella tua app e chiamare il metodo FirebaseDynamicLinks.getDynamicLink() quando l'app viene caricata per far passare i dati nel collegamento dinamico.

  1. Installa e inizializza gli SDK Firebase per Flutter se non l'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 Android, apri la pagina delle impostazioni del progetto della console Firebase e assicurati di aver specificato la tua 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 cui stai creando la tua app.

Androide

Su Android, devi aggiungere un nuovo filtro di intent che cattura i deep link del tuo dominio, poiché il collegamento dinamico 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 da te specificato, la tua app avvierà l'attività con questo filtro di intenti per gestire il collegamento.

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 la tua app iOS sia configurata correttamente con il tuo ID App Store e 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 fornitura sia impostato.

    3. Aggiungi il dominio che hai creato nella console Firebase ai Domini associati, preceduti da applinks: (ad esempio, applinks:example.page.link ).

    4. Nella pagina Info, 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 tu 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: disabilita l'utilizzo della pasteboard iOS da parte di Dynamic Links SDK.

      Per impostazione predefinita, Dynamic Links SDK utilizza il pasteboard per migliorare l'affidabilità dei deep link post-installazione. Utilizzando la bacheca, Dynamic Links può assicurarsi che quando un utente apre un collegamento dinamico 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 di questo è 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 la pasteboard contiene un URL di collegamento dinamico, vedranno una notifica che la tua app ha eseguito l'accesso alla 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 nell'applicazione, è necessario implementare due scenari.

Stato terminato

Se l'applicazione viene chiusa, il metodo FirebaseDynamicLinks.getInitialLink consente di recuperare il collegamento dinamico che ha aperto l'applicazione.

Questa è una richiesta asincrona, quindi ha senso gestire un collegamento prima di eseguire il rendering della logica dell'applicazione, ad esempio un navigatore. Ad esempio, puoi gestirlo nella funzione main :

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Get any initial links
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  runApp(MyApp(initialLink));
}

All'interno della logica dell'applicazione, puoi quindi 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);
}

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

Stato di sfondo/primo piano

Mentre l'applicazione è aperta o in background, puoi ascoltare gli eventi di collegamenti dinamici utilizzando un gestore di flusso. Il getter FirebaseDynamicLinks.onLink restituisce uno Stream contenente un PendingDynamicLinkData :

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});