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.
Konfiguracja Firebase i pakietu Dynamic Links SDK
Zainstaluj i zainicjuj pakiety SDK Firebase na potrzeby Flutter, jeśli jeszcze ich nie masz.
Aby zainstalować wtyczkę Dynamic Links, uruchom to polecenie w katalogu głównym projektu Flutter:
flutter pub add firebase_dynamic_links
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
Utwórz konto dewelopera Apple, jeśli jeszcze go nie masz.
Na stronie Ustawienia projektu w konsoli Firebase sprawdź, czy Twoja aplikacja na iOS jest prawidłowo skonfigurowana (identyfikator App Store i identyfikator zespołu).
Na stronie dla deweloperów Apple utwórz profil obsługi administracyjnej aplikacji z włączoną opcją powiązanej domeny.
W Xcode wykonaj te czynności:
Otwórz aplikację pod nagłówkiem CELE.
Na stronie Podpisywanie i możliwości sprawdź, czy Twój zespół jest zarejestrowany, a Twój profil obsługi administracyjnej jest skonfigurowany.
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
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).Jeśli w projekcie Firebase masz skonfigurowaną domenę niestandardową, dodaj prefiks adresu URL linku dynamicznego do pliku
Info.plist
projektu 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 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 kluczFirebaseDeepLinkPasteboardRetrievalEnabled
naNO
.
Obsługa precyzyjnych linków
Obsługa linku dynamicznego w aplikacji wymaga wdrożenia dwóch scenariuszy.
Stan zakończenia
Skonfiguruj te metody:
FirebaseDynamicLinks.getInitialLink
– zwracaFuture<PendingDynamicLinkData?>
FirebaseDynamicLinks.onLink
– moduł obsługi zdarzeń, który zwraca elementStream
zawierającyPendingDynamicLinkData?
.
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));
Testowanie linku dynamicznego na platformie iOS
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
).