Aby otrzymywać utworzone Linki dynamiczne Firebase, musisz dodać do aplikacji pakiet Dynamic Links SDK i wywołać metodę FirebaseDynamicLinks.getDynamicLink() po załadowaniu aplikacji, aby uzyskać dane przekazane w linku dynamicznym.
Konfiguracja Firebase i pakietu Dynamic Links SDK
Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera, jeśli nie zostało to jeszcze zrobione.
W katalogu głównym projektu Flutter uruchom to polecenie, aby zainstalować wtyczkę Linków dynamicznych:
flutter pub add firebase_dynamic_linksJeś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 związane z integracją 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 Kontynuuj. 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
Utwórz konto dewelopera Apple, jeśli jeszcze go nie masz.
Na stronie Ustawienia projektu w konsoli Firebase sprawdź, czy aplikacja na iOS jest prawidłowo skonfigurowana z identyfikatorem App Store i identyfikatorem zespołu.
W witrynie Apple Developer utwórz profil administracyjny dla aplikacji z włączoną funkcją powiązanych domen.
W Xcode wykonaj te czynności:
Otwórz aplikację w sekcji CELE.
Na stronie Podpisywanie i możliwości sprawdź, czy Twój zespół jest zarejestrowany i czy profil administracyjny jest ustawiony.
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.linkNa stronie Informacje dodaj do projektu typ adresu URL. W polu Schematy adresów URL ustaw identyfikator pakietu aplikacji. (Identyfikator może być dowolny, np.
Bundle ID).Jeśli masz skonfigurowaną domenę niestandardową dla projektu w Firebase, dodaj prefiks adresu URL Linku dynamicznego do pliku
Info.plistw projekcie iOS, używając kluczaFirebaseDynamicLinksCustomDomains.<?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>Opcjonalnie: wyłącz korzystanie z pamięci podręcznej 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 pierwotnej treści, do której 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.plistw projekcie Xcode i ustaw wartość kluczaFirebaseDeepLinkPasteboardRetrievalEnablednaNO.
Obsługa precyzyjnych linków
Aby obsłużyć link dynamiczny w aplikacji, musisz zaimplementować 2 scenariusze.
Stan zakończenia
Skonfiguruj te metody:
FirebaseDynamicLinks.getInitialLink– zwracaFuture<PendingDynamicLinkData?>FirebaseDynamicLinks.onLink– moduł obsługi zdarzeń, który zwracaStreamzawierającyPendingDynamicLinkData?
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));
Testowanie linku dynamicznego na platformie iOS
Aby przetestować link dynamiczny na iOS, musisz użyć prawdziwego urządzenia. Jeśli testujesz link dynamiczny w stanie aplikacji po jej zamknięciu (czyli po przesunięciu palcem w celu zamknięcia), musisz też uruchomić aplikację w trybie wydania (czyli flutter run --release).