Otrzymuj dynamiczne linki Firebase w aplikacji Flutter

Aby otrzymać utworzone przez siebie linki dynamiczne Firebase , musisz umieścić pakiet SDK linków dynamicznych w swojej aplikacji i wywoływać metodę FirebaseDynamicLinks.getDynamicLink() podczas ładowania aplikacji, aby uzyskać dane przekazane w linku dynamicznym.

  1. Zainstaluj i zainicjuj zestawy SDK Firebase dla Flutter, jeśli jeszcze tego nie zrobiłeś.

  2. W katalogu głównym projektu Flutter uruchom następujące polecenie, aby zainstalować wtyczkę Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. Jeśli tworzysz aplikację na Androida, otwórz stronę Ustawienia projektu w konsoli Firebase i upewnij się, że podałeś klucz podpisywania SHA-1. Jeśli korzystasz z linków do aplikacji, podaj również swój klucz SHA-256.

Integracja platformy

Wykonaj następujące kroki integracji platformy dla platform, dla których tworzysz swoją aplikację.

Android

Na Androidzie musisz dodać nowy filtr intencji przechwytujący precyzyjne linki z Twojej domeny, ponieważ link dynamiczny przekieruje do Twojej domeny, jeśli Twoja aplikacja jest zainstalowana. Jest to wymagane, aby Twoja aplikacja mogła odbierać dane Dynamic Link po jej zainstalowaniu/aktualizacji ze Sklepu Play i dotknięciu przycisku Kontynuuj. W 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>

Gdy użytkownicy otworzą link dynamiczny z precyzyjnym linkiem do określonego schematu i hosta, aplikacja rozpocznie działanie z tym filtrem intencji, aby obsłużyć link.

Następnym krokiem jest upewnienie się, że odcisk palca SHA-256 certyfikatu podpisywania jest zarejestrowany w konsoli Firebase dla aplikacji. Więcej informacji na temat pobierania odcisku palca SHA-256 można znaleźć na stronie Uwierzytelnianie klienta .

Platformy Apple'a

  1. Utwórz konto programisty Apple, jeśli jeszcze go nie masz.

  2. Na stronie Ustawienia projektu w konsoli Firebase upewnij się, że Twoja aplikacja na iOS jest poprawnie skonfigurowana z identyfikatorem App Store i identyfikatorem zespołu.

  3. W witrynie Apple Developer utwórz profil aprowizacji dla swojej aplikacji z włączoną funkcją Associated Domain.

  4. W Xcode wykonaj następujące czynności:

    1. Otwórz swoją aplikację pod nagłówkiem CELE .

    2. Na stronie Podpisywanie i możliwości upewnij się, że Twój zespół jest zarejestrowany, a Twój profil obsługi administracyjnej jest ustawiony.

    3. Na stronie Podpisywanie i możliwości włącz powiązane domeny i dodaj następujące elementy do listy powiązanych domen (zastąp przykład swoją domeną):

      applinks:example.page.link
      
    4. Na stronie Informacje dodaj typ adresu URL do swojego projektu. W polu Schematy adresów URL ustaw identyfikator pakietu aplikacji. (Identyfikator może być Bundle ID lub czymkolwiek chcesz.)

    5. Jeśli masz skonfigurowaną domenę niestandardową dla projektu Firebase, dodaj prefiks adresu URL linku dynamicznego do pliku Info.plist projektu na iOS, używając klucza 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. Opcjonalnie: wyłącz używanie przez pakiet Dynamic Links SDK obszaru roboczego systemu iOS.

      Domyślnie pakiet Dynamic Links SDK używa obszaru roboczego do poprawy niezawodności precyzyjnych linków po instalacji. Korzystając z obszaru roboczego, Dynamic Links może zapewnić, że gdy użytkownik otworzy link dynamiczny, ale musi najpierw zainstalować Twoją aplikację, będzie mógł natychmiast przejść do oryginalnej treści, do której prowadzi link, gdy otworzy aplikację po raz pierwszy po instalacji.

      Wadą tego jest to, że użycie stołu montażowego wyzwala powiadomienie w systemie iOS 14 i nowszych. Tak więc, gdy użytkownicy po raz pierwszy otworzą Twoją aplikację, jeśli obszar roboczy zawiera adres URL linku dynamicznego, zobaczą powiadomienie, że aplikacja uzyskała dostęp do obszaru roboczego, co może powodować zamieszanie.

      Aby wyłączyć to zachowanie, zmodyfikuj plik Info.plist projektu Xcode i ustaw klucz FirebaseDeepLinkPasteboardRetrievalEnabled na NO .

Aby obsłużyć łącze dynamiczne w aplikacji, należy zaimplementować dwa scenariusze.

Stan zakończony

Skonfiguruj następujące metody:

  1. FirebaseDynamicLinks.getInitialLink — zwraca Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink — moduł obsługi zdarzeń, który zwraca Stream zawierający PendingDynamicLinkData?

Android zawsze otrzyma łącze za pośrednictwem FirebaseDynamicLinks.getInitialLink ze stanu zakończonego, ale w przypadku systemu iOS nie jest to gwarantowane. Dlatego warto ustawić oba w następującej kolejności, aby Twoja aplikacja otrzymała 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));
}

W ramach logiki aplikacji możesz następnie sprawdzić, czy link został obsłużony i wykonać akcję, na przykład:

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

Stan tła / pierwszego planu

Gdy aplikacja jest otwarta lub działa w tle, użyj gettera FirebaseDynamicLinks.onLink :

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

Alternatywnie, jeśli chcesz sprawdzić, czy do otwarcia aplikacji użyto dokładnego łącza dynamicznego, przekaż je zamiast tego metodzie getDynamicLink :

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

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

Aby przetestować łącze dynamiczne w systemie iOS, wymagane jest użycie rzeczywistego urządzenia. Będziesz także musiał uruchomić aplikację w trybie zwalniania (tj. flutter run --release .), jeśli testujesz łącze dynamiczne ze stanu zakończonego (tj. aplikacja została zamknięta przez przeciągnięcie).