Odbieranie Linków dynamicznych Firebase w aplikacji Flutter

Aby otrzymać utworzone linki dynamiczne Firebase, musisz umieścić w aplikacji pakiet SDK Linków dynamicznych i wywołać metodę FirebaseDynamicLinks.getDynamicLink() podczas wczytywania aplikacji w celu pobrania danych przekazywanych w linku dynamicznym.

  1. Zainstaluj i zainicjuj pakiety SDK Firebase na potrzeby Flutter, jeśli jeszcze ich nie masz.

  2. Aby zainstalować wtyczkę Dynamic Links, uruchom to polecenie w katalogu głównym projektu Flutter:

    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 został określony klucz podpisywania SHA-1. Jeśli korzystasz z linków aplikacji, podaj też klucz SHA-256.

Integracja platformy

Wykonaj poniższe czynności związane z integracją platformy dla platform, na które tworzysz aplikację.

Android

W przypadku Androida musisz dodać nowy filtr intencji, który przechwytuje precyzyjne linki do Twojej domeny, ponieważ link dynamiczny przekierowuje do Twojej domeny, jeśli zainstalujesz aplikację. Jest to wymagane, aby aplikacja otrzymała dane linku dynamicznego po jej zainstalowaniu lub zaktualizowaniu ze Sklepu Play i kliknięciem przycisku Dalej. W aplikacji 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 rozpocznie działanie z tym filtrem intencji w celu obsługi linku.

Następnym krokiem jest sprawdzenie, czy odcisk cyfrowy certyfikatu podpisywania SHA-256 jest zarejestrowany w konsoli Firebase dla aplikacji. Więcej informacji o pobieraniu odcisku cyfrowego 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 Twoja aplikacja na iOS jest prawidłowo skonfigurowana (identyfikator App Store i identyfikator zespołu).

  3. Na stronie dla deweloperów Apple utwórz profil obsługi administracyjnej aplikacji z włączoną opcją powiązanej domeny.

  4. W Xcode wykonaj te czynności:

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

    2. Na stronie Podpisywanie i możliwości sprawdź, czy Twój zespół jest zarejestrowany, a Twój profil obsługi administracyjnej jest skonfigurowany.

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

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

    5. Jeśli w projekcie Firebase masz skonfigurowaną domenę niestandardową, 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 możliwość korzystania przez pakiet SDK Linków dynamicznych z paska do iOS.

      Domyślnie pakiet Dynamic Links SDK korzysta z paska, aby zwiększyć niezawodność precyzyjnych linków po instalacji. W postaci wklejenia linki dynamiczne pozwalają zapewnić, że gdy użytkownik otworzy link dynamiczny, ale najpierw musi zainstalować aplikację, po pierwszym uruchomieniu aplikacji po jej zainstalowaniu może on od razu przejść do oryginalnej treści powiązanej z linkiem.

      Wadą jest to, że użycie schowka powoduje wysłanie powiadomienia w systemie iOS 14 lub nowszym. Tak więc przy pierwszym uruchomieniu aplikacji, w przypadku którego wklejony tekst zawiera URL linku dynamicznego, wyświetli się powiadomienie o tym, że aplikacja uzyskała dostęp do schowka, co może wprowadzać w błąd.

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

Obsługa linku dynamicznego w aplikacji wymaga wdrożenia dwóch scenariuszy.

Stan zakończenia

Skonfiguruj te metody:

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

Po zakończeniu działania Android zawsze otrzyma link przez FirebaseDynamicLinks.getInitialLink, ale w przypadku iOS nie jest to gwarantowane. Dlatego warto skonfigurować je w podanej kolejności, by 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);
}

Tło / Stan pierwszego planu

Gdy aplikacja jest otwarta lub w tle, użyj metody getter 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 na urządzeniu z iOS, musisz użyć rzeczywistego urządzenia. Jeśli testujesz link dynamiczny po zamknięciu aplikacji (czyli gdy aplikacja została zamknięta przez przesunięcie), musisz ją też uruchomić w trybie wersji (tj. flutter run --release).