Aby otrzymać utworzone przez siebie linki dynamiczne Firebase , musisz umieścić pakiet SDK Dynamic Links w swojej aplikacji i wywoływać metody handleUniversalLink:
i dynamicLinkFromCustomSchemeURL:
podczas ładowania aplikacji, aby dane były przekazywane w linku dynamicznym.
Wymagania wstępne
Zanim zaczniesz, pamiętaj o dodaniu Firebase do swojego projektu na iOS .
Skonfiguruj Firebase i pakiet Dynamic Links SDK
Użyj Menedżera pakietów Swift, aby zainstalować i zarządzać zależnościami Firebase.
- W Xcode przy otwartym projekcie aplikacji przejdź do File > Add Packages .
- Po wyświetleniu monitu dodaj repozytorium Firebase Apple platforms SDK:
- Wybierz bibliotekę Linki dynamiczne.
- Aby optymalnie korzystać z Linków dynamicznych, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie pakietu Firebase SDK dla Google Analytics do swojej aplikacji. Możesz wybrać bibliotekę bez kolekcji IDFA lub z kolekcją IDFA.
- Po zakończeniu Xcode automatycznie rozpocznie rozwiązywanie i pobieranie zależności w tle.
https://github.com/firebase/firebase-ios-sdk
Teraz wykonaj kilka kroków konfiguracyjnych:
- W konsoli Firebase otwórz sekcję Linki dynamiczne . Zaakceptuj warunki korzystania z usługi, jeśli zostaniesz o to poproszony.
Upewnij się, że w ustawieniach aplikacji określono identyfikator App Store i prefiks identyfikatora aplikacji. Aby wyświetlić i edytować ustawienia aplikacji, przejdź do strony Ustawienia projektu Firebase i wybierz swoją aplikację na iOS.
Możesz potwierdzić, że Twój projekt Firebase jest prawidłowo skonfigurowany do korzystania z linków dynamicznych w aplikacji na iOS, otwierając następujący 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. Na przykład:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
Jeśli pole
details
jest puste, sprawdź dokładnie, czy podałeś prefiks identyfikatora aplikacji. Pamiętaj, że prefiks identyfikatora aplikacji może różnić się od identyfikatora zespołu.Opcjonalnie : wyłącz używanie przez pakiet Dynamic Links SDK obszaru roboczego systemu iOS.
Domyślnie pakiet Dynamic Links SDK używa obszaru roboczego do poprawy niezawodności precyzyjnych linków po instalacji. Korzystając z obszaru roboczego, Dynamic Links może zapewnić, że gdy użytkownik otworzy link dynamiczny, ale musi najpierw zainstalować Twoją aplikację, będzie mógł natychmiast przejść do oryginalnej treści, do której prowadzi link, gdy otworzy aplikację po raz pierwszy po instalacji.
Wadą tego jest to, że użycie stołu montażowego wyzwala powiadomienie w systemie iOS 14 i nowszych. Tak więc, gdy użytkownicy po raz pierwszy otworzą Twoją aplikację, jeśli obszar roboczy zawiera adres URL, zobaczą powiadomienie, że aplikacja uzyskała dostęp do obszaru roboczego, co może powodować zamieszanie.
Aby wyłączyć to zachowanie, zmodyfikuj plik
Info.plist
projektu Xcode i ustaw kluczFirebaseDeepLinkPasteboardRetrievalEnabled
naNO
.
Otwórz Linki dynamiczne w swojej aplikacji
- Na karcie Informacje projektu Xcode Twojej aplikacji utwórz nowy typ adresu URL, który będzie używany w przypadku linków dynamicznych. Ustaw pole Identyfikator na unikalną wartość, a pole schematu adresu URL jako identyfikator pakietu, który jest domyślnym schematem adresów URL używanym przez łącza dynamiczne.
- Na karcie Możliwości projektu Xcode Twojej aplikacji włącz opcję Domeny skojarzone i dodaj następujące elementy do listy Domen skojarzonych :
applinks:your_dynamic_links_domain
- Jeśli chcesz otrzymywać linki dynamiczne z całkowicie niestandardową domeną , w pliku
Info.plist
projektu Xcode utwórz klucz o nazwieFirebaseDynamicLinksCustomDomains
i ustaw go na prefiksy adresów URL linków dynamicznych Twojej aplikacji. Na przykład:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - Zaimportuj moduł
FirebaseCore
do swojegoUIApplicationDelegate
, a także wszelkie inne moduły Firebase, z których korzysta delegat aplikacji. Na przykład, aby użyć Cloud Firestore i uwierzytelniania:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Szybki
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Cel C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Skonfiguruj udostępnioną instancję
FirebaseApp
w metodzie applicationapplication(_:didFinishLaunchingWithOptions:)
delegata aplikacji:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Szybki
// Use Firebase library to configure APIs FirebaseApp.configure()
Cel 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 pośrednictwemUIApplicationDelegateAdaptor
lubNSApplicationDelegateAdaptor
. Musisz także wyłączyć przełączanie delegatów aplikacji. Aby uzyskać więcej informacji, zobacz instrukcje 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
application:continueUserActivity:restorationHandler:
method obsłuż linki odebrane jako Universal Links , gdy aplikacja jest już zainstalowana:Szybki
Uwaga: ten produkt nie jest dostępny w docelowych systemach 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 }
Cel C
Uwaga: ten produkt nie jest dostępny w docelowych systemach 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; }
- Na koniec w
application:openURL:options:
obsługuj linki otrzymane przez niestandardowy schemat adresów URL Twojej aplikacji. Ta metoda jest wywoływana, gdy aplikacja jest otwierana po raz pierwszy po instalacji.Jeśli link dynamiczny nie zostanie znaleziony przy pierwszym uruchomieniu aplikacji, ta metoda zostanie wywołana z
url
elementuDynamicLink
ustawionym nanil
, co oznacza, że zestaw SDK nie znalazł pasującego oczekującego linku dynamicznego.Szybki
Uwaga: ten produkt nie jest dostępny w docelowych systemach 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 }
Cel C
Uwaga: ten produkt nie jest dostępny w docelowych systemach 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; }