Odbieranie Linków dynamicznych Firebase w aplikacji Flutter

Aby otrzymywać utworzone Linki dynamiczne Firebase, musisz dodać do aplikacji pakiet SDK Linków dynamicznych i wywołać metodę FirebaseDynamicLinks.getDynamicLink() po wczytaniu aplikacji, aby uzyskać dane przekazane w linku dynamicznym.

  1. Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera, jeśli nie zostało to jeszcze zrobione.

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

Integracja platformy

Wykonaj poniższe czynności dotyczące integracji platformy w przypadku platform, na których tworzysz aplikację.

Android

Na Androidzie musisz dodać nowy filtr intencji, który będzie przechwytywać precyzyjne linki do Twojej domeny, ponieważ dynamiczny link przekieruje do Twojej domeny, jeśli aplikacja jest zainstalowana. Jest to wymagane, aby aplikacja mogła odbierać dane linku dynamicznego po zainstalowaniu lub zaktualizowaniu jej ze Sklepu Play i kliknięciu przycisku Dalej. 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 przez Ciebie schematu i hosta, aplikacja uruchomi działanie z tym filtrem intencji, aby obsłużyć link.

Następnym krokiem jest zarejestrowanie w konsoli Firebase odcisku cyfrowego SHA-256 certyfikatu podpisywania aplikacji. Więcej informacji o tym, jak uzyskać 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 sprawdź, czy aplikacja na iOS jest prawidłowo skonfigurowana za pomocą identyfikatora App Store i identyfikatora zespołu.

  3. W witrynie Apple Developer utwórz profil administracyjny dla aplikacji z włączoną funkcją powiązanej domeny.

  4. W Xcode wykonaj te czynności:

    1. Otwórz aplikację w sekcji CELE.

    2. Na stronie Podpisywanie i możliwości sprawdź, czy Twój zespół jest zarejestrowany i czy profil administracyjny jest ustawiony.

    3. Na stronie Podpisywanie i możliwości włącz opcję Powiązane domeny i dodaj do listy Powiązane domeny te wpisy (zastąp przykład swoją domeną):

      applinks:example.page.link
      
    4. Na stronie Informacje dodaj do projektu typ adresu URL. W polu Schematy URL ustaw identyfikator pakietu aplikacji. (Identyfikator może być Bundle ID lub dowolnym innym znakiem).

    5. Jeśli masz skonfigurowaną domenę niestandardową dla projektu Firebase, dodaj prefiks adresu URL Dynamic Link do pliku Info.plist w projekcie 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 schowka iOS przez pakiet SDK Dynamic Links.

      Domyślnie pakiet Dynamic Links SDK używa schowka, aby zwiększyć niezawodność precyzyjnych linków po instalacji. Korzystając z pamięci podręcznej, linki dynamiczne mogą zapewnić, że gdy użytkownik otworzy link dynamiczny, ale najpierw będzie musiał zainstalować Twoją aplikację, po pierwszym uruchomieniu aplikacji po instalacji będzie mógł od razu przejść do oryginalnych treści, do których prowadził link.

      Wadą tego rozwiązania jest to, że użycie schowka powoduje wyświetlenie powiadomienia w systemie iOS 14 lub nowszym. Dlatego gdy użytkownicy po raz pierwszy otworzą Twoją aplikację, a schowek będzie zawierać adres URL linku dynamicznego, zobaczą powiadomienie o tym, że aplikacja uzyskała dostęp do schowka, co może być mylące.

      Aby wyłączyć to działanie, zmodyfikuj plik Info.plist w projekcie Xcode i ustaw wartość klucza FirebaseDeepLinkPasteboardRetrievalEnabled na NO.

Aby obsłużyć link dynamiczny w aplikacji, musisz zaimplementować 2 scenariusze.

Stan zakończenia

Skonfiguruj te metody:

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

Android zawsze otrzyma link za pomocą FirebaseDynamicLinks.getInitialLink, gdy aplikacja jest zamknięta, ale w przypadku iOS nie jest to gwarantowane. Dlatego warto skonfigurować je 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 tła / pierwszego planu

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

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 na iOS, musisz użyć prawdziwego urządzenia. Jeśli testujesz link dynamiczny w stanie aplikacji, która została zamknięta (np. przez przesunięcie palcem), musisz też uruchomić aplikację w trybie wydania (np. flutter run --release.).