Otrzymuj linki dynamiczne Firebase w aplikacji Flutter

Aby otrzymać utworzone łącza dynamiczne Firebase , musisz dołączyć pakiet SDK łączy dynamicznych do swojej aplikacji i wywołać metodę FirebaseDynamicLinks.getDynamicLink() podczas ładowania aplikacji, aby pobrać dane przekazywane w łączu dynamicznym.

  1. Zainstaluj i zainicjuj zestawy SDK Firebase dla Flutter, jeśli jeszcze tego nie zrobiłeś.

  2. Z katalogu głównego projektu Flutter uruchom następujące polecenie, aby zainstalować wtyczkę Dynamic Links:

    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 podałeś klucz podpisywania SHA-1. Jeśli korzystasz z łączy aplikacji, podaj także klucz SHA-256.

Integracja platformy

Wykonaj poniższe kroki integracji platformy dla platform, dla których tworzysz aplikację.

Android

Na Androidzie musisz dodać nowy filtr intencji wychwytujący głębokie linki w Twojej domenie, ponieważ Link dynamiczny przekieruje do Twojej domeny, jeśli Twoja aplikacja jest zainstalowana. Jest to wymagane, aby aplikacja mogła otrzymać dane łącza dynamicznego po jej zainstalowaniu/zaktualizowaniu ze Sklepu Play i kliknięciu przycisku Kontynuuj. 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ą łącze dynamiczne z precyzyjnym łączem do określonego schematu i hosta, aplikacja rozpocznie działanie z tym filtrem intencji w celu obsługi łącza.

Następnym krokiem jest upewnienie się, że odcisk palca SHA-256 certyfikatu podpisującego jest zarejestrowany w konsoli Firebase aplikacji. Więcej informacji na temat odzyskiwania odcisku palca SHA-256 można znaleźć na stronie Uwierzytelnianie klienta .

Platformy Apple

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

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

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

  4. W Xcode wykonaj następujące czynności:

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

    2. Na stronie Podpisywanie i możliwości upewnij się, że Twój zespół jest zarejestrowany, a profil udostępniania jest ustawiony.

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

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

    5. Jeśli masz skonfigurowaną domenę niestandardową dla swojego projektu Firebase, dodaj prefiks adresu URL łącza dynamicznego do pliku Info.plist projektu 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 pakietu Dynamic Links SDK na pulpicie iOS.

      Domyślnie pakiet Dynamic Links SDK korzysta z obszaru roboczego, aby poprawić niezawodność precyzyjnych linków po instalacji. Korzystając z pulpitu, łącza dynamiczne mogą mieć pewność, że gdy użytkownik otworzy łącze dynamiczne, ale będzie musiał najpierw zainstalować aplikację, będzie mógł natychmiast przejść do oryginalnej połączonej zawartości przy pierwszym otwarciu aplikacji po instalacji.

      Wadą tego jest to, że użycie pulpitu powoduje powiadomienie w systemie iOS 14 i nowszych wersjach. Tak więc, gdy użytkownicy otworzą Twoją aplikację po raz pierwszy, jeśli pulpit zawiera adres URL łącza dynamicznego, zobaczą powiadomienie, że Twoja aplikacja uzyskała dostęp do obszaru roboczego, co może powodować zamieszanie.

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

Aby obsłużyć łącze dynamiczne w aplikacji, należy wdrożyć dwa scenariusze.

Stan zakończony

Skonfiguruj następujące metody:

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

Android zawsze otrzyma łącze za pośrednictwem FirebaseDynamicLinks.getInitialLink ze stanu zakończenia, ale w systemie iOS nie jest to gwarantowane. Dlatego warto ustawić je oba w następującej kolejności, aby mieć pewność, że Twoja 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 ramach logiki aplikacji możesz następnie sprawdzić, czy łącze zostało obsłużone i wykonać akcję, 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 tła/pierwszego planu

Gdy aplikacja jest otwarta lub działa w tle, użyj modułu pobierającego FirebaseDynamicLinks.onLink :

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});

Alternatywnie, jeśli chcesz sprawdzić, czy do otwarcia aplikacji użyto dokładnego łącza dynamicznego, przekaż go zamiast tego do metody getDynamicLink :

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

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

Aby przetestować łącze dynamiczne w systemie iOS, wymagane jest użycie rzeczywistego urządzenia. Będziesz także musiał uruchomić aplikację w trybie zwolnienia (tj. flutter run --release .), jeśli testujesz łącze dynamiczne ze stanu aplikacji, który został zakończony (tzn. aplikacja została zamknięta).