Odbieranie Linków dynamicznych Firebase w aplikacji Flutter

Aby otrzymywać utworzone przez siebie Linki dynamiczne Firebase, musisz dodać do aplikacji pakiet Dynamic Links SDK i wywołać metodę, podczas wczytywania aplikacji, aby pobrać dane przekazane w linku dynamicznym. FirebaseDynamicLinks.getDynamicLink()

  1. Zainstaluj i zainicjuj pakiety SDK Firebase dla Flattera, jeśli nie masz ich jeszcze.

  2. W katalogu głównym projektu Flutter uruchom to polecenie, aby zainstalować wtyczkę Linków dynamicznych:

    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 masz określony klucz podpisywania SHA-1. Jeśli używasz linków do aplikacji, określ też klucz SHA-256.

Integracja z platformą

Wykonaj te czynności integracji z platformą w przypadku platform, na które tworzysz aplikację.

Android

W Androidzie musisz dodać nowy filtr intencji, aby przechwytywać precyzyjne linki do swojej domeny, ponieważ link dynamiczny przekieruje do Twojej domeny, jeśli aplikacja jest zainstalowana. Jest to wymagane, aby aplikacja mogła otrzymywać dane linku dynamicznego po zainstalowaniu lub zaktualizowaniu ze Sklepu Play i kliknięciu przycisku Dalej. W pliku 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, Twoja aplikacja uruchomi aktywność z tym filtrem intencji, aby obsłużyć link.

Następnym krokiem jest upewnienie się, że odcisk cyfrowy SHA-256 certyfikatu podpisywania jest zarejestrowany w konsoli Firebase w przypadku aplikacji. Więcej informacji o tym, jak pobrać odcisk cyfrowy SHA-256, znajdziesz na stronie Uwierzytelnianie klienta.

Platformy Apple

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

  2. Na stronie Ustawienia projektu w konsoli Firebase upewnij się, że aplikacja na iOS jest prawidłowo skonfigurowana przy użyciu identyfikatora App Store i identyfikatora zespołu.

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

  4. W Xcode wykonaj te czynności:

    1. Otwórz aplikację w sekcji TARGETS (Cele).

    2. Na stronie Signing &Capabilities (Podpisywanie i możliwości) upewnij się, że Twój zespół jest zarejestrowany i masz ustawiony profil aprowizacji.

    3. Na stronie Signing &Capabilities (Podpisywanie i możliwości) włącz Associated Domains (Powiązane domeny) i dodaj do listy powiązanych domen te informacje (zastąp przykład swoją domeną):

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

    5. Jeśli masz skonfigurowaną domenę niestandardową w projekcie w Firebase, dodaj prefiks adresu URL linku dynamicznego do pliku Info.plist projektu na iOS za pomocą 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 korzystanie z tablicy schowka iOS przez pakiet SDK Linków dynamicznych.

      Domyślnie pakiet Dynamic Links SDK używa tablicy schowka, aby zwiększyć niezawodność precyzyjnych linków po instalacji. Dzięki tablicy schowka Linki dynamiczne mogą zapewnić, że gdy użytkownik otworzy link dynamiczny, ale najpierw musi zainstalować Twoją aplikację, po jej zainstalowaniu będzie mógł od razu przejść do oryginalnej treści, do której prowadzi link.

      Wadą tego rozwiązania jest to, że użycie tablicy schowka powoduje wyświetlenie powiadomienia w iOS 14 i nowszych wersjach. Dlatego, gdy użytkownicy otworzą Twoją aplikację po raz pierwszy, jeśli tablica schowka zawiera adres URL linku dynamicznego, zobaczą powiadomienie, że Twoja aplikacja uzyskała dostęp do tablicy schowka, co może być mylące.

      Aby wyłączyć to działanie, otwórz plik Info.plist projektu Xcode i ustaw klucz FirebaseDeepLinkPasteboardRetrievalEnabled na NO.

Aby obsługiwać link dynamiczny w aplikacji, musisz zaimplementować 2 scenariusze.

Stan zamknięcia

Skonfiguruj te metody:

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

Android zawsze będzie otrzymywać link za pomocą FirebaseDynamicLinks.getInitialLink ze stanu zamknięcia, ale w iOS nie jest to gwarantowane. Dlatego warto skonfigurować obie te metody w tej kolejności, aby mieć pewność, że aplikacja otrzyma 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 logice aplikacji możesz sprawdzić, czy link został obsłużony, i wykonać działanie, np.:

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 w tle lub na pierwszym planie

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

Jeśli chcesz sprawdzić, czy do otwarcia aplikacji użyto dokładnego linku dynamicznego, możesz też przekazać go do metody getDynamicLink:

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

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

Aby przetestować link dynamiczny na iOS, musisz użyć rzeczywistego urządzenia. Jeśli testujesz link dynamiczny ze stanu zamknięcia aplikacji (tzn. aplikacja została zamknięta przez przesunięcie), musisz też uruchomić aplikację w trybie wydania (np. flutter run --release).