Firebase is back at Google I/O on May 10! Register now

Erhalten Sie dynamische Firebase-Links in einer Flutter-App

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Um die von Ihnen erstellten dynamischen Firebase-Links zu erhalten, müssen Sie das SDK für dynamische Links in Ihre App einschließen und die FirebaseDynamicLinks.getDynamicLink() Methode aufrufen, wenn Ihre App geladen wird, um die Daten abzurufen, die im dynamischen Link übergeben werden.

  1. Installieren und initialisieren Sie die Firebase SDKs für Flutter , falls Sie dies noch nicht getan haben.

  2. Führen Sie im Stammverzeichnis Ihres Flutter-Projekts den folgenden Befehl aus, um das Dynamic Links-Plugin zu installieren:

    flutter pub add firebase_dynamic_links
    
  3. Wenn Sie eine Android-App erstellen, öffnen Sie die Seite Projekteinstellungen der Firebase-Konsole und vergewissern Sie sich, dass Sie Ihren SHA-1-Signaturschlüssel angegeben haben. Wenn Sie App-Links verwenden, geben Sie auch Ihren SHA-256-Schlüssel an.

Plattformintegration

Führen Sie die folgenden Plattformintegrationsschritte für die Plattformen aus, für die Sie Ihre App erstellen.

Android

Unter Android müssen Sie einen neuen Intent-Filter hinzufügen, um Deep-Links Ihrer Domain zu erfassen, da der dynamische Link auf Ihre Domain umgeleitet wird, wenn Ihre App installiert ist. Dies ist erforderlich, damit Ihre App die Dynamic Link-Daten erhält, nachdem sie aus dem Play Store installiert/aktualisiert wurde und man auf die Schaltfläche „Weiter“ tippt. 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>

Wenn Benutzer einen dynamischen Link mit einem Deep-Link zu dem von Ihnen angegebenen Schema und Host öffnen, startet Ihre App die Aktivität mit diesem Absichtsfilter, um den Link zu verarbeiten.

Der nächste Schritt besteht darin, sicherzustellen, dass der SHA-256-Fingerabdruck des Signaturzertifikats in der Firebase-Konsole für die App registriert ist. Weitere Einzelheiten zum Abrufen Ihres SHA-256-Fingerabdrucks finden Sie auf der Seite Authentifizierung Ihres Clients .

Apple-Plattformen

  1. Erstellen Sie ein Apple-Entwicklerkonto, falls Sie noch keines haben.

  2. Stellen Sie auf der Seite Projekteinstellungen der Firebase-Konsole sicher, dass Ihre iOS-App korrekt mit Ihrer App Store-ID und Team-ID konfiguriert ist.

  3. Erstellen Sie auf der Apple Developer-Website ein Bereitstellungsprofil für Ihre App mit aktivierter Funktion „Associated Domain“.

  4. Gehen Sie in Xcode wie folgt vor:

    1. Öffnen Sie Ihre App unter der Überschrift TARGETS .

    2. Stellen Sie auf der Seite Signing & Capabilities sicher, dass Ihr Team registriert und Ihr Bereitstellungsprofil eingerichtet ist.

    3. Aktivieren Sie auf der Seite Signing & Capabilities Associated Domains und fügen Sie Folgendes zur Liste der Associated Domains hinzu (ersetzen Sie example durch Ihre Domain):

      applinks:example.page.link
      
    4. Fügen Sie Ihrem Projekt auf der Infoseite einen URL-Typ hinzu. Legen Sie das Feld URL-Schemata auf die Bundle-ID Ihrer App fest. (Die Kennung kann eine Bundle ID oder was auch immer Sie wünschen sein.)

    5. Wenn Sie eine benutzerdefinierte Domäne für Ihr Firebase-Projekt eingerichtet haben, fügen Sie das URL-Präfix für den dynamischen Link mithilfe des FirebaseDynamicLinksCustomDomains -Schlüssels in die Info.plist -Datei Ihres iOS-Projekts ein.

      <?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. Optional: Deaktivieren Sie die Verwendung des iOS-Pasteboards durch das Dynamic Links SDK.

      Standardmäßig verwendet das Dynamic Links SDK die Zwischenablage, um die Zuverlässigkeit von Deep Links nach der Installation zu verbessern. Durch die Verwendung der Zwischenablage können dynamische Links sicherstellen, dass, wenn ein Benutzer einen dynamischen Link öffnet, aber zuerst Ihre App installieren muss, der Benutzer beim ersten Öffnen der App nach der Installation sofort zum ursprünglich verlinkten Inhalt wechseln kann.

      Der Nachteil dabei ist, dass die Verwendung der Zwischenablage eine Benachrichtigung auf iOS 14 und höher auslöst. Wenn Benutzer Ihre App also zum ersten Mal öffnen und die Zwischenablage eine dynamische Link-URL enthält, sehen sie eine Benachrichtigung, dass Ihre App auf die Zwischenablage zugegriffen hat, was zu Verwirrung führen kann.

      Um dieses Verhalten zu deaktivieren, bearbeiten Sie die Info.plist -Datei Ihres Xcode-Projekts und legen Sie den Schlüssel FirebaseDeepLinkPasteboardRetrievalEnabled auf NO fest.

Um einen dynamischen Link in Ihrer Anwendung zu handhaben, müssen zwei Szenarien implementiert werden.

Beendeter Zustand

Wenn die Anwendung beendet wird, können Sie mit der FirebaseDynamicLinks.getInitialLink Methode den dynamischen Link abrufen, der die Anwendung geöffnet hat.

Dies ist eine asynchrone Anforderung, daher ist es sinnvoll, einen Link vor dem Rendern der Anwendungslogik, z. B. eines Navigators, zu behandeln. Sie könnten dies beispielsweise in der main behandeln:

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

Innerhalb Ihrer Anwendungslogik können Sie dann prüfen, ob ein Link behandelt wurde und eine Aktion ausführen, zum Beispiel:

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

Wenn Sie alternativ feststellen möchten, ob zum Öffnen der Anwendung ein exakter dynamischer Link verwendet wurde, übergeben Sie ihn stattdessen an die getDynamicLink Methode:

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

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

Hintergrund-/Vordergrundzustand

Während die Anwendung geöffnet ist oder sich im Hintergrund befindet, können Sie mithilfe eines Stream-Handlers auf dynamische Links-Ereignisse hören. Der Getter FirebaseDynamicLinks.onLink gibt einen Stream zurück, der PendingDynamicLinkData enthält:

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

Um einen dynamischen Link unter iOS zu testen, müssen Sie ein echtes Gerät verwenden. Sie müssen die App auch im Freigabemodus ausführen (dh flutter run --release .), wenn Sie einen dynamischen Link aus einem beendeten (dh die App wurde geschlossen) App-Status testen.