Aby otrzymać Firebase Dynamic Links, który
utworzyłeś, musisz dodać do aplikacji pakiet SDK Dynamic Links i wywoływać metody handleUniversalLink:
i dynamicLinkFromCustomSchemeURL:
, gdy aplikacja się wczytuje, aby pobrać dane przekazane w parametry Dynamic Link.
Wymagania wstępne
Zanim zaczniesz, dodaj Firebase do projektu na iOS.
Konfigurowanie Firebase i pakietu SDK Dynamic Links
Do instalacji zależności Firebase i zarządzania nimi możesz używać menedżera pakietów Swift.
- Po otwarciu projektu aplikacji w Xcode wybierz 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 Inne flagi linkera w ustawieniach kompilacji docelowej. - Aby uzyskać optymalne wyniki w przypadku Dynamic Links, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie do aplikacji pakietu SDK Firebase dla Google Analytics. Możesz wybrać bibliotekę z zbieraniem identyfikatorów IDFA lub bez niego.
- Gdy to zrobisz, Xcode automatycznie zacznie wyszukiwać i pobierać zależności w tle.
https://github.com/firebase/firebase-ios-sdk.git
Teraz wykonaj czynności konfiguracyjne:
- W konsoli Firebase otwórz sekcję Dynamic Links. Zaakceptuj warunki korzystania z usługi, jeśli pojawi się taka prośba.
-
Sprawdź, czy identyfikator App Store i prefiks identyfikatora aplikacji są określone w ustawieniach aplikacji. Aby wyświetlić i zmienić ustawienia aplikacji, otwórz stronę Ustawienia projektu Firebase i wybierz aplikację na iOS.
Aby sprawdzić, czy Twój projekt Firebase jest prawidłowo skonfigurowany do używania funkcji 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. Przykład:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
Jeśli pole
details
jest puste, sprawdź, czy podano prefiks identyfikatora aplikacji. Pamiętaj, że prefiks identyfikatora aplikacji może nie być taki sam jak identyfikator zespołu. -
Opcjonalnie: wyłącz korzystanie pakietu SDK Dynamic Links z Przystawki na iOS.
Domyślnie pakiet SDK Dynamic Links używa schowka, aby zwiększyć niezawodność precyzyjnych linków po instalacji. Dzięki temu, że Dynamic Links korzysta z taśmy, możesz mieć pewność, że gdy użytkownik otworzy Dynamic Link, ale najpierw będzie musiał zainstalować Twoją aplikację, będzie mógł od razu przejść do oryginalnych treści powiązanych, gdy otworzy aplikację po raz pierwszy po jej zainstalowaniu.
Minusem jest to, że korzystanie z bufora wydruku powoduje wyświetlenie powiadomienia w systemie iOS 14 lub nowszym. Dlatego gdy użytkownicy po raz pierwszy otworzą aplikację, jeśli schowek zawiera adres URL, zobaczą powiadomienie, że aplikacja uzyskała dostęp do schowka, co może wywołać zamieszanie.
Aby wyłączyć to zachowanie, otwórz plik
Info.plist
projektu Xcode i ustaw kluczFirebaseDeepLinkPasteboardRetrievalEnabled
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 wpisz unikalną wartość, a w polu Schemat URL wpisz identyfikator pakietu, który jest domyślnym schematem URL używanym przez Dynamic Links.
- Na karcie Możliwości w projekcie Xcode aplikacji włącz opcję Powiązane domeny i dodaj do listy Powiązane domeny te informacje:
applinks:your_dynamic_links_domain
- Jeśli chcesz otrzymywać Dynamic Links z pełną domeną niestandardową, w pliku
Info.plist
projektu Xcode utwórz klucz o nazwieFirebaseDynamicLinksCustomDomains
i przypisz go do prefiksów URL-i Dynamic Links aplikacji. Przykład:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Zaimportuj moduł
FirebaseCore
w plikuUIApplicationDelegate
oraz wszystkie inne moduły Firebase, których używa delegowany obiekt 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 współdzieloną instancję
FirebaseApp
w metodzieapplication(_:didFinishLaunchingWithOptions:)
w delegacie 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ć obiekt delegujący aplikacji i dołączyć go do struktury
App
za pomocą funkcjiUIApplicationDelegateAdaptor
lubNSApplicationDelegateAdaptor
. Musisz też wyłączyć swizlowanie zastępników aplikacji. Więcej informacji znajdziesz w instrukcjach 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ługuj linki otrzymane jako uniwersalne linki, gdy aplikacja jest już zainstalowana:Swift
Uwaga: ta usługa nie jest dostępna w przypadku systemów operacyjnych 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: ta usługa nie jest dostępna w przypadku systemów operacyjnych 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<UIUserActivityRestoring>> *_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; }
- W sekcje
application:openURL:options:
należy obsłużyć linki otrzymane za pomocą schematu niestandardowego adresu URL aplikacji. Ta metoda jest wywoływana, gdy aplikacja jest otwierana 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
=nil
, co oznacza, że pakiet SDK nie znalazł pasującego oczekującego elementu Dynamic Link.DynamicLink
Swift
Uwaga: ta usługa nie jest dostępna w przypadku systemów operacyjnych 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: ta usługa nie jest dostępna w przypadku systemów operacyjnych macOS, Mac Catalyst, tvOS ani watchOS.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)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; }