Aby otrzymywać utworzone przez siebie Linki dynamiczne Firebase, musisz dodać do aplikacji pakiet SDK Linków dynamicznych i wywołać metodę FirebaseDynamicLinks.getDynamicLink() podczas wczytywania aplikacji, aby uzyskać dane przekazywane w Linku dynamicznym.
Konfiguracja Firebase i pakietu Dynamic Links SDK
Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera, jeśli ich jeszcze nie masz.
W katalogu głównym projektu Fluttera 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 upewnij się, że masz określony klucz podpisywania SHA-1. Jeśli używasz linków do aplikacji, określ też klucz SHA-256.
Integracja z platformą
Wykonaj te czynności integracji z platformą w przypadku platform, na które tworzysz aplikację.
Android
W Androidzie musisz dodać nowy filtr intencji, aby przechwytywać precyzyjne linki z Twojej domeny, ponieważ Link dynamiczny przekieruje do Twojej domeny, jeśli aplikacja jest zainstalowana. Jest to wymagane, aby aplikacja mogła odbierać dane Linku dynamicznego po zainstalowaniu lub zaktualizowaniu ze Sklepu Play i kliknięciu przycisku Dalej. 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ą Link dynamiczny z precyzyjnym linkiem do schematu i hosta, które określisz, Twoja aplikacja uruchomi aktywność z tym filtrem intencji, aby obsłużyć link.
Następnym krokiem jest upewnienie się, że odcisk cyfrowy SHA-256 certyfikatu podpisywania jest zarejestrowany w konsoli Firebase w przypadku aplikacji. Więcej informacji o tym, jak pobrać 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 upewnij się, że aplikacja na iOS jest prawidłowo skonfigurowana z identyfikatorem App Store i identyfikatorem zespołu.
W witrynie Apple Developer utwórz profil aprowizacji dla swojej aplikacji z włączoną funkcją Powiązane domeny.
W Xcode wykonaj te czynności:
Otwórz aplikację w sekcji TARGETS (Cele).
Na stronie Signing &Capabilities (Podpisywanie i możliwości) upewnij się, że Twój zespół jest zarejestrowany i masz ustawiony profil aprowizacji.
Na stronie Signing &Capabilities (Podpisywanie i możliwości) włącz Associated Domains (Powiązane domeny) i dodaj do listy Powiązane domeny te informacje (zastąp przykład swoją domeną):
applinks:example.page.linkNa stronie Info (Informacje) dodaj do projektu typ adresu URL. W polu URL Schemes (Schematy adresów URL) ustaw identyfikator pakietu aplikacji. (Identyfikator może być
Bundle IDlub dowolny inny).Jeśli masz skonfigurowaną domenę niestandardową dla projektu w Firebase, dodaj prefiks adresu URL Linku dynamicznego do pliku
Info.plistprojektu na iOS za pomocą 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 używanie schowka iOS przez pakiet SDK Linków dynamicznych.
Domyślnie pakiet SDK Linków dynamicznych używa schowka, aby zwiększyć niezawodność precyzyjnych linków po instalacji. Dzięki użyciu schowka Linki dynamiczne mogą zapewnić, że gdy użytkownik otworzy Link dynamiczny, ale najpierw musi zainstalować Twoją aplikację, po jej zainstalowaniu będzie mógł od razu przejść do oryginalnej treści, do której prowadzi link.
Wadą tego rozwiązania jest to, że użycie schowka powoduje wyświetlenie powiadomienia w iOS 14 i nowszych wersjach. Dlatego, gdy użytkownicy otworzą Twoją aplikację po raz pierwszy, jeśli schowek zawiera adres URL Linku dynamicznego, zobaczą powiadomienie, że Twoja aplikacja uzyskała dostęp do schowka, co może być mylące.
Aby wyłączyć to zachowanie, otwórz plik
Info.plistprojektu Xcode i ustaw kluczFirebaseDeepLinkPasteboardRetrievalEnablednaNO.
Obsługa precyzyjnych linków
Aby obsługiwać Link dynamiczny w aplikacji, musisz zaimplementować 2 scenariusze.
Stan zamknięty
Skonfiguruj te metody:
FirebaseDynamicLinks.getInitialLink– zwracaFuture<PendingDynamicLinkData?>FirebaseDynamicLinks.onLink– procedura obsługi zdarzeń, która zwracaStreamzawierającyPendingDynamicLinkData?
Android zawsze będzie otrzymywać link za pomocą FirebaseDynamicLinks.getInitialLink ze stanu zamkniętego, ale w iOS nie jest to gwarantowane. Dlatego warto skonfigurować obie te metody 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, 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 w tle lub na pierwszym planie
Gdy aplikacja jest otwarta lub działa w tle, użyj gettera 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));
Testowanie Linku dynamicznego na platformie iOS
Aby przetestować Link dynamiczny w iOS, musisz użyć rzeczywistego urządzenia. Jeśli testujesz Link dynamiczny ze stanu zamkniętej aplikacji (czyli aplikacji, która została zamknięta przez przesunięcie), musisz też uruchomić aplikację w trybie wydania (czyli flutter run --release).