Odbieranie Linków dynamicznych Firebase w aplikacji Flutter

Aby otrzymywać utworzone przez siebie Linki dynamiczne Firebase, musisz dodać do aplikacji pakiet SDK Linków dynamicznych i wywołać metodę FirebaseDynamicLinks.getDynamicLink() podczas wczytywania aplikacji, aby uzyskać dane przekazywane w Linku dynamicznym.

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

  2. W katalogu głównym projektu Fluttera 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 z Twojej domeny, ponieważ Link dynamiczny przekieruje do Twojej domeny, jeśli aplikacja jest zainstalowana. Jest to wymagane, aby aplikacja mogła odbierać 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 schematu i hosta, które określisz, 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 z identyfikatorem App Store i identyfikatorem zespołu.

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

  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ązane domeny 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 lub dowolny inny).

    5. Jeśli masz skonfigurowaną domenę niestandardową dla projektu 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 używanie schowka iOS przez pakiet SDK Linków dynamicznych.

      Domyślnie pakiet SDK Linków dynamicznych używa schowka, aby zwiększyć niezawodność precyzyjnych linków po instalacji. Dzięki użyciu 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 schowka powoduje wyświetlenie powiadomienia w iOS 14 i nowszych wersjach. Dlatego, gdy użytkownicy otworzą Twoją aplikację po raz pierwszy, jeśli schowek zawiera adres URL Linku dynamicznego, zobaczą powiadomienie, że Twoja aplikacja uzyskała dostęp do schowka, co może być mylące.

      Aby wyłączyć to zachowanie, 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ęty

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ętego, 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, 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 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 konkretnego Linku dynamicznego, przekaż 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 w iOS, musisz użyć rzeczywistego urządzenia. Jeśli testujesz Link dynamiczny ze stanu zamkniętej aplikacji (czyli aplikacji, która została zamknięta przez przesunięcie), musisz też uruchomić aplikację w trybie wydania (czyli flutter run --release).