Otrzymuj linki dynamiczne na iOS

Aby otrzymać utworzone łącza dynamiczne Firebase , musisz dołączyć pakiet SDK łączy dynamicznych do swojej aplikacji i wywołać metody handleUniversalLink: i dynamicLinkFromCustomSchemeURL: podczas ładowania aplikacji, aby pobrać dane przekazywane w łączu dynamicznym.

Warunki wstępne

Zanim zaczniesz, pamiętaj o dodaniu Firebase do swojego projektu na iOS .

Użyj Menedżera pakietów Swift, aby zainstalować zależności Firebase i zarządzać nimi.

  1. W Xcode, przy otwartym projekcie aplikacji, przejdź do File > Add Packages .
  2. Po wyświetleniu monitu dodaj repozytorium SDK platform Firebase Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Wybierz bibliotekę Linki dynamiczne.
  5. Dodaj flagę -ObjC do sekcji Inne flagi linkera w ustawieniach kompilacji celu.
  6. Aby zapewnić optymalne działanie Linków dynamicznych, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie pakietu SDK Firebase dla Google Analytics do swojej aplikacji. Można wybrać bibliotekę bez kolekcji IDFA lub z kolekcją IDFA.
  7. Po zakończeniu Xcode automatycznie rozpocznie rozwiązywanie i pobieranie zależności w tle.

Teraz wykonaj kilka kroków konfiguracyjnych:

  1. W konsoli Firebase otwórz sekcję Linki dynamiczne . Zaakceptuj warunki korzystania z usługi, jeśli zostaniesz o to poproszony.
  2. 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 aplikację na iOS.

    Możesz sprawdzić, czy Twój projekt Firebase jest prawidłowo skonfigurowany do korzystania z łączy dynamicznych w aplikacji na iOS, otwierając następujący adres URL:

    https://your_dynamic_links_domain/apple-app-site-association

    Jeśli Twoja aplikacja jest połączona, plik apple-app-site-association zawiera odniesienie do przedrostka identyfikatora aplikacji i identyfikatora pakietu. 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.

  3. Opcjonalnie : wyłącz używanie pakietu Dynamic Links SDK na pulpicie iOS.

    Domyślnie pakiet Dynamic Links SDK korzysta z obszaru roboczego, aby poprawić niezawodność precyzyjnych linków po instalacji. Korzystając z pulpitu, łącza dynamiczne mogą mieć pewność, że gdy użytkownik otworzy łącze dynamiczne, ale będzie musiał najpierw zainstalować aplikację, będzie mógł natychmiast przejść do oryginalnej połączonej zawartości przy pierwszym otwarciu aplikacji po instalacji.

    Wadą tego jest to, że użycie pulpitu powoduje powiadomienie w systemie iOS 14 i nowszych wersjach. Tak więc, gdy użytkownicy otworzą Twoją aplikację po raz pierwszy, jeśli pulpit zawiera adres URL, zobaczą powiadomienie, że Twoja aplikacja uzyskała dostęp do obszaru roboczego, co może powodować zamieszanie.

    Aby wyłączyć to zachowanie, edytuj plik Info.plist projektu Xcode i ustaw klucz FirebaseDeepLinkPasteboardRetrievalEnabled na NO .

  1. Na karcie Informacje projektu Xcode aplikacji utwórz nowy typ adresu URL, który będzie używany w przypadku łączy dynamicznych. Ustaw pole Identyfikator na unikalną wartość, a pole schematu adresu URL na identyfikator pakietu, który jest domyślnym schematem adresu URL używanym przez łącza dynamiczne.
  2. Na karcie Możliwości projektu Xcode aplikacji włącz opcję Powiązane domeny i dodaj następujące elementy do listy Powiązane domeny :
    applinks:your_dynamic_links_domain
  3. Jeśli chcesz otrzymywać linki dynamiczne z całkowicie niestandardową domeną , w pliku Info.plist projektu Xcode utwórz klucz o nazwie FirebaseDynamicLinksCustomDomains i ustaw go na prefiksy adresów URL linków dynamicznych swojej aplikacji. Na przykład:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Zaimportuj moduł FirebaseCore do swojego UIApplicationDelegate , a także wszelkie inne moduły Firebase, których używa 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;
    // ...
          
  5. Skonfiguruj udostępnioną instancję FirebaseApp w aplikacji delegata application(_:didFinishLaunchingWithOptions:) metoda:

    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];
  6. Jeśli używasz SwiftUI, musisz utworzyć delegata aplikacji i dołączyć go do struktury App za pośrednictwem UIApplicationDelegateAdaptor lub NSApplicationDelegateAdaptor . Musisz także wyłączyć przełączanie delegatów aplikacji. Aby uzyskać więcej informacji, zapoznaj się z instrukcjami SwiftUI .

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Następnie w application:continueUserActivity:restorationHandler: obsłuż linki otrzymane jako linki uniwersalne, gdy aplikacja jest już zainstalowana:

    Szybki

    Uwaga: ten produkt nie jest dostępny w systemach docelowych 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 systemach docelowych 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;
    }
  8. Na koniec w application:openURL:options: obsłuż linki otrzymane za pośrednictwem niestandardowego schematu adresu URL Twojej aplikacji. Ta metoda jest wywoływana, gdy aplikacja jest otwierana po raz pierwszy po instalacji.

    Jeśli przy pierwszym uruchomieniu aplikacji nie zostanie znaleziony link dynamiczny, metoda ta zostanie wywołana z url DynamicLink ustawionym na nil , co oznacza, że ​​pakiet SDK nie znalazł pasującego, oczekującego łącza dynamicznego.

    Szybki

    Uwaga: ten produkt nie jest dostępny w systemach docelowych 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 systemach docelowych 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;
    }