Aby otrzymywać Firebase Dynamic Links, które
utworzysz, musisz uwzględnić w aplikacji pakiet SDK Dynamic Links i wywoływać metody handleUniversalLink:
i dynamicLinkFromCustomSchemeURL:
po wczytaniu aplikacji, aby uzyskać dane przekazywane w Dynamic Link.
Wymagania wstępne
Zanim zaczniesz, dodaj Firebase do projektu na iOS.
Konfigurowanie Firebase i pakietu Dynamic Links SDK
Do instalacji zależności Firebase i do zarządzania nimi możesz używać menedżera pakietów Swift.
- Po otwarciu projektu aplikacji wybierz w Xcode opcję File > Add Packages (Plik > Dodaj pakiety).
- Gdy pojawi się prośba, dodaj repozytorium pakietu SDK Firebase na platformy Apple:
- Wybierz bibliotekę Dynamic Links.
- Dodaj flagę
-ObjC
do sekcji Other Linker Flags (Inne flagi linkera) w ustawieniach kompilacji projektu. - Aby w pełni korzystać z Dynamic Links, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie do aplikacji pakietu SDK Firebase dla Google Analytics. Możesz wybrać bibliotekę bez zbierania identyfikatora IDFA lub z jego zbieraniem. Zapoznaj się z naszymi odpowiedziami na najczęstsze pytania dotyczące najnowszej organizacji modułów w Google Analytics dla pakietu SDK Firebase.
- Gdy skończysz, Xcode zacznie automatycznie wyszukiwać i pobierać zależności w tle.
https://github.com/firebase/firebase-ios-sdk.git
Teraz wykonaj kilka czynności konfiguracyjnych:
- W Firebasekonsoli otwórz sekcję Dynamic Links. W razie potrzeby zaakceptuj warunki korzystania z usługi.
-
Sprawdź, czy w ustawieniach aplikacji podany jest identyfikator App Store i prefiks identyfikatora aplikacji. Aby wyświetlić i edytować ustawienia aplikacji, otwórz stronę Ustawienia projektu Firebase i wybierz aplikację na iOS.
Aby sprawdzić, czy projekt Firebase jest prawidłowo skonfigurowany do używania Dynamic Links w aplikacji na iOS, otwórz ten adres URL:
https://your_dynamic_links_domain/apple-app-site-association
Jeśli aplikacja jest połączona, plik
apple-app-site-association
zawiera odwołanie do prefiksu identyfikatora aplikacji i identyfikatora pakietu aplikacji. Przykład:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
Jeśli pole
details
jest puste, sprawdź, czy został podany prefiks identyfikatora aplikacji. Pamiętaj, że prefiks identyfikatora aplikacji może nie być taki sam jak identyfikator zespołu. -
Opcjonalnie: wyłącz korzystanie przez pakiet SDK Dynamic Links z schowka iOS.
Domyślnie pakiet SDK Dynamic Links używa schowka, aby zwiększyć niezawodność precyzyjnych linków po instalacji. Korzystając z pamięci podręcznej, Dynamic Links może zapewnić, że gdy użytkownik otworzy Dynamic Link, ale najpierw będzie musiał zainstalować Twoją aplikację, po jej pierwszym uruchomieniu po instalacji będzie mógł od razu przejść do pierwotnie połączonych treści.
Wadą tego rozwiązania jest to, że użycie schowka wywołuje powiadomienie w systemie iOS 14 i nowszym. Dlatego, gdy użytkownicy po raz pierwszy otworzą Twoją aplikację, a schowek będzie zawierać adres URL, zobaczą powiadomienie, że Twoja aplikacja uzyskała dostęp do schowka, co może być dla nich mylące.
Aby wyłączyć to działanie, zmodyfikuj plik
Info.plist
w projekcie Xcode i ustaw wartość kluczaFirebaseDeepLinkPasteboardRetrievalEnabled
naNO
.
Otwórz Dynamic Links w aplikacji
- Na karcie Informacje w projekcie Xcode aplikacji utwórz nowy typ adresu URL, który będzie używany w przypadku Dynamic Links. W polu Identyfikator ustaw unikalną wartość, a w polu Schemat adresu URL wpisz identyfikator pakietu, który jest domyślnym schematem adresu URL używanym przez Dynamic Links.
- Na karcie Capabilities (Możliwości) w projekcie Xcode aplikacji włącz opcję Associated Domains (Powiązane domeny) i dodaj poniższe elementy do listy Associated Domains (Powiązane domeny):
applinks:your_dynamic_links_domain
- Jeśli chcesz otrzymywać Dynamic Links z w pełni niestandardową domeną, w pliku
Info.plist
projektu Xcode utwórz klucz o nazwieFirebaseDynamicLinksCustomDomains
i ustaw go na prefiksy URL Dynamic Links aplikacji. Przykład:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Zaimportuj moduł
FirebaseCore
w plikuUIApplicationDelegate
, a także inne moduły Firebase, których używa delegat aplikacji. Aby na przykład użyć właściwości Cloud Firestore i Authentication:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Skonfiguruj udostępnioną instancję
FirebaseApp
w metodzieapplication(_:didFinishLaunchingWithOptions:)
delegata aplikacji:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Jeśli używasz SwiftUI, musisz utworzyć delegata aplikacji i dołączyć go do struktury
App
za pomocąUIApplicationDelegateAdaptor
lubNSApplicationDelegateAdaptor
. Musisz też wyłączyć zamianę delegata aplikacji. Więcej informacji znajdziesz w instrukcjach dotyczących SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- Następnie w metodzie
application:continueUserActivity:restorationHandler:
obsłuż linki otrzymane jako uniwersalne linki, gdy aplikacja jest już zainstalowana:Swift
Uwaga: ten produkt nie jest dostępny na platformach macOS, Mac Catalyst, tvOS ani watchOS.func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { let handled = DynamicLinks.dynamicLinks() .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in // ... } return handled }
Objective-C
Uwaga: ten produkt nie jest dostępny na platformach macOS, Mac Catalyst, tvOS ani watchOS.- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler: #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0) (nonnull void (^)(NSArray<id
> *_Nullable))restorationHandler { #else (nonnull void (^)(NSArray *_Nullable))restorationHandler { #endif // __IPHONE_12_0 BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { // ... }]; return handled; } - Na koniec w
application:openURL:options:
obsłuż linki otrzymane za pomocą schematu niestandardowego adresu URL aplikacji. Ta metoda jest wywoływana, gdy aplikacja zostanie otwarta po raz pierwszy po zainstalowaniu.Jeśli podczas pierwszego uruchomienia aplikacji nie zostanie znaleziony element Dynamic Link, ta metoda zostanie wywołana z wartością
url
elementuDynamicLink
ustawioną nanil
, co oznacza, że pakiet SDK nie znalazł pasującego oczekującego elementu Dynamic Link.Swift
Uwaga: ten produkt nie jest dostępny na platformach macOS, Mac Catalyst, tvOS ani watchOS.@available(iOS 9.0, *) func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool { return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey .sourceApplication] as? String, annotation: "") } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) { // Handle the deep link. For example, show the deep-linked content or // apply a promotional offer to the user's account. // ... return true } return false }
Objective-C
Uwaga: ten produkt nie jest dostępny na platformach macOS, Mac Catalyst, tvOS ani watchOS.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary
*)options { return [self application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; if (dynamicLink) { if (dynamicLink.url) { // Handle the deep link. For example, show the deep-linked content, // apply a promotional offer to the user's account or show customized onboarding view. // ... } else { // Dynamic link has empty deep link. This situation will happens if // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link, // but pending link is not available for this device/App combination. // At this point you may display default onboarding view. } return YES; } return NO; }