Aby otrzymać
utworzone przez siebie Linki dynamiczne Firebase, musisz umieścić w aplikacji pakiet SDK Linków dynamicznych, a podczas wczytywania aplikacji wywoływać metody handleUniversalLink:
i dynamicLinkFromCustomSchemeURL:
, by przekazać dane w linku dynamicznym.
Wymagania wstępne
Zanim zaczniesz, dodaj Firebase do swojego projektu na iOS.
Konfiguracja Firebase i pakietu Dynamic Links SDK
Użyj menedżera pakietów Swift, aby zainstalować zależności Firebase i nimi zarządzać.
- Po otwarciu projektu aplikacji przejdź w Xcode do File > Add Packages (Plik > Dodaj pakiety).
- Gdy pojawi się prośba, dodaj repozytorium SDK platform Apple Platform SDK Firebase:
- Wybierz bibliotekę linków dynamicznych.
- Dodaj flagę
-ObjC
do sekcji Inne flagi łączące w ustawieniach kompilacji celu. - Aby zapewnić optymalne działanie linków dynamicznych, włącz Google Analytics w projekcie Firebase i dodaj do aplikacji pakiet SDK Firebase dla Google Analytics. Możesz wybrać bibliotekę bez zbierania danych IDFA lub z zbieraniem identyfikatorów IDFA.
- Po zakończeniu Xcode automatycznie rozpocznie rozpoznawanie i pobieranie zależności w tle.
https://github.com/firebase/firebase-ios-sdk.git
Teraz wykonaj kilka czynności konfiguracyjnych:
- W konsoli Firebase otwórz sekcję Połączenia dynamiczne. Jeśli pojawi się taka prośba, zaakceptuj warunki korzystania z usługi.
-
Upewnij się, że w ustawieniach aplikacji podano identyfikator z App Store i jej prefiks. Aby wyświetlić i edytować ustawienia aplikacji, otwórz stronę Ustawienia w projekcie Firebase i wybierz swoją aplikację na iOS.
Aby sprawdzić, czy projekt Firebase jest prawidłowo skonfigurowany do korzystania z linków dynamicznych w aplikacji na iOS, otwórz ten URL:
https://your_dynamic_links_domain/apple-app-site-association
Jeśli Twoja 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ź jeszcze raz, 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 możliwość korzystania przez pakiet SDK linków dynamicznych z wklejenia do iOS.
Domyślnie pakiet SDK Linków dynamicznych korzysta z wklejenia, aby zwiększyć niezawodność precyzyjnych linków po instalacji. Korzystając z paskowania, linki dynamiczne pozwalają zapewnić, że gdy użytkownik otworzy link dynamiczny, ale najpierw musi zainstalować Twoją aplikację, po pierwszym otwarciu aplikacji po instalacji będzie mógł od razu przejść do oryginalnej treści powiązanej z linkiem.
Wadą jest to, że użycie schowka powoduje wyświetlenie powiadomienia w systemie iOS 14 lub nowszym. Dlatego gdy po raz pierwszy użytkownicy otworzą Twoją aplikację, jeśli wklejony tekst zawiera adres URL, zobaczą powiadomienie o tym, że aplikacja uzyskała dostęp do tego obszaru, co może powodować dezorientację.
Aby wyłączyć to zachowanie, edytuj plik
Info.plist
projektu Xcode i ustaw kluczFirebaseDeepLinkPasteboardRetrievalEnabled
naNO
.
Otwieranie linków dynamicznych w aplikacji
- Na karcie Informacje w projekcie Xcode aplikacji utwórz nowy typ adresu URL, który będzie używany na potrzeby Linków dynamicznych. 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 Linki dynamiczne.
- Na karcie Capabilities (Możliwości) w projekcie Xcode aplikacji włącz powiązane domeny i dodaj te pozycje do listy Powiązane domeny:
applinks:your_dynamic_links_domain
- Jeśli chcesz otrzymywać linki dynamiczne z w pełni niestandardową domeną, w pliku
Info.plist
projektu Xcode utwórz klucz o nazwieFirebaseDynamicLinksCustomDomains
i ustaw go na prefiksy adresów URL linków dynamicznych swojej aplikacji. Przykład:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Zaimportuj moduł
FirebaseCore
do obiektuUIApplicationDelegate
, a także wszystkie inne moduły Firebase używane przez przedstawiciela aplikacji. Aby na przykład użyć Cloud Firestore i Uwierzytelniania:Certyfikat 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:)
przedstawiciela aplikacji:Certyfikat 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ć przedstawiciela aplikacji i dołączyć go do struktury
App
za pomocąUIApplicationDelegateAdaptor
lubNSApplicationDelegateAdaptor
. Musisz też wyłączyć przełączanie przekazywania dostępu do aplikacji. Więcej informacji znajdziesz w instrukcjach SwiftUI.Certyfikat 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ługa linków otrzymanych jako linki uniwersalne, gdy aplikacja jest już zainstalowana:Swift
Uwaga: ta usługa nie jest dostępna na urządzeniach docelowych z systemami macOS, Mac Catalyst, tvOS i 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 na urządzeniach docelowych z systemami macOS, Mac Catalyst, tvOS i 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; }
- Na koniec w
application:openURL:options:
obsługuj linki otrzymane przez schemat niestandardowego adresu URL Twojej aplikacji. Ta metoda jest wywoływana przy pierwszym otwarciu aplikacji po instalacji.Jeśli przy pierwszym uruchomieniu aplikacji nie uda się znaleźć linku dynamicznego, ta metoda zostanie wywołana z wartością
url
DynamicLink
ustawioną nanil
, co oznacza, że pakiet SDK nie znalazł pasującego oczekującego linku dynamicznego.Swift
Uwaga: ta usługa nie jest dostępna na urządzeniach docelowych z systemami macOS, Mac Catalyst, tvOS i 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 na urządzeniach docelowych z systemami macOS, Mac Catalyst, tvOS i 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; }