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ę Metoda FirebaseDynamicLinks.getDynamicLink(), gdy aplikacja wczytuje się na uzyskać dane przekazywane w linku dynamicznym.

  1. Zainstaluj i zainicjuj pakiety SDK Firebase na potrzeby Flutter, jeśli: jeszcze tego nie zrobiliśmy.

  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 Ustawienia projektu. w konsoli Firebase i upewnij się, że został zdefiniowany SHA-1. klucz podpisywania. Jeśli korzystasz z linków aplikacji, podaj też klucz SHA-256.

Integracja platformy

Wykonaj te czynności związane z integracją platformy dla używanej przez Ciebie platformy przy tworzeniu aplikacji.

Android

Na Androidzie musisz dodać nowy filtr intencji, przechwytujący precyzyjne linki do swojej domeny, Link dynamiczny przekierowuje do Twojej domeny, jeśli Twoja aplikacja jest zainstalowana. Jest to wymagane, aby aplikacja mogła: otrzymują dane linku dynamicznego po ich zainstalowaniu lub zaktualizowaniu ze Sklepu Play oraz kliknięciem przycisku Przycisk 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 schematu i hosta określonego przez Ciebie, aplikacja rozpocząć aktywność za pomocą tego filtra intencji, aby obsłużyć link.

Następnym krokiem jest sprawdzenie, czy odcisk cyfrowy SHA-256 certyfikatu podpisywania jest zarejestrowany w konsoli Firebase. dla danej aplikacji. Więcej informacji o pobieraniu odcisku palca SHA-256 znajdziesz w Authenticating Your Client (Uwierzytelnianie klienta).

Platformy Apple

  1. Tworzenie konta dewelopera Apple jeśli jeszcze jej nie masz.

  2. W ustawieniach projektu w konsoli Firebase, sprawdź, czy aplikacja na iOS skonfigurowane za pomocą Twojego identyfikatora App Store i identyfikatora zespołu.

  3. Na stronie dla deweloperów Apple utwórz profil obsługi administracyjnej aplikacji. z włączoną funkcją Powiązana domena.

  4. W Xcode wykonaj te czynności:

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

    2. W sekcji umiejętności, sprawdź, czy Twój zespół jest zarejestrowany. profil obsługi administracyjnej został skonfigurowany.

    3. W sekcji na stronie „Możliwości”, włącz Powiązane domeny oraz dodaj następujące rekordy do listy powiązanych domen (zastąp przykład swoją domeną):

      applinks:example.page.link
      
    4. Na stronie Informacje dodaj do projektu typ adresu URL. Ustaw schematy adresów URL do identyfikatora pakietu aplikacji. (identyfikatorem może być Bundle ID lub co tylko chcesz).

    5. Jeśli dla projektu Firebase masz skonfigurowaną domenę niestandardową, dodaj atrybut Prefiks adresu URL linku dynamicznego do pliku Info.plist projektu iOS za pomocą klawisza 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 polecanego tekstu, aby ulepszać niezawodności precyzyjnych linków po instalacji. Przy użyciu wklejania Dzięki linkom, gdy użytkownik otworzy link dynamiczny, zainstalować aplikację, użytkownik może od razu przejść do oryginalnej wersji treści, do których prowadzą linki przy pierwszym otwarciu aplikacji. instalacji.

      Wadą tego rozwiązania jest fakt, że korzystanie ze schowka powoduje na urządzeniach z iOS 14 i nowszych. Gdy użytkownik pierwszy raz otworzy jeśli wklejony adres URL zawiera URL linku dynamicznego, wyświetli się powiadomienie o uzyskaniu przez aplikację dostępu do schowka, co może spowodować zdezorientowanie.

      Aby wyłączyć to zachowanie, edytuj plik Info.plist projektu Xcode i ustaw klawisz 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?.

Gdy działanie zostanie zakończone, Android zawsze otrzyma link przez FirebaseDynamicLinks.getInitialLink. ale w iOS nie ma gwarancji. Dlatego warto skonfigurować je w takiej kolejności: aby upewnić się, ż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żywaj aplikacji 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 metodę 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. Musisz też uruchomić aplikację w trybie publikowania (tj. flutter run --release). w przypadku testowania linku dynamicznego ze stanu aplikacji, która została zakończona (tj. aplikacja została zamknięta przez przesunięcie).