Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Otrzymuj dynamiczne linki na iOS

Aby otrzymać Firebase dynamiczne linki, które zostały utworzone , musi zawierać dynamiczne linki SDK w swojej aplikacji i wywołać handleUniversalLink: i dynamicLinkFromCustomSchemeURL: metody Po wczytaniu aplikacji na pobieranie danych przekazywanych w Dynamic Link.

Warunki wstępne

Przed rozpoczęciem upewnij się, aby dodać Firebase do projektu iOS .

  1. Dodaj Firebase do projektu iOS .
  2. Zawierać następujące kapsułę w swoim Podfile :
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  3. Run pod install i otworzyć utworzony .xcworkspace pliku.
  4. W konsoli Firebase otwórz sekcję dynamiczne linki. Zaakceptuj warunki korzystania z usługi, jeśli zostaniesz o to poproszony.
  5. Upewnij się, że identyfikator App Store Twojej aplikacji i prefiks identyfikatora aplikacji są określone w ustawieniach aplikacji. Aby przeglądać i edytować ustawienia w aplikacji, przejdź do projektu Firebase za Ustawienia strony i wybierz swoją aplikację na iOS.

    Możesz sprawdzić, czy 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 podłączony, apple-app-site-association plik zawiera odniesienie do aplikacji App ID prefiks i wiązki ID. Na przykład:

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    Jeśli details pole jest pusta, sprawdź, czy podano swój prefiks App ID. Pamiętaj, że prefiks identyfikatora aplikacji może nie być taki sam jak identyfikator zespołu.

  6. Opcjonalnie: wykorzystanie wyłączyć dynamiczne linki SDK z tektury iOS.

    Domyślnie pakiet SDK linków dynamicznych korzysta z pulpitu do zwiększania niezawodności precyzyjnych linków po instalacji. Korzystając ze schowka, Dynamic Links może zapewnić, że gdy użytkownik otworzy Dynamic Link, ale najpierw musi zainstalować Twoją aplikację, może natychmiast przejść do oryginalnej, połączonej zawartości podczas otwierania aplikacji po raz pierwszy po instalacji.

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

    Aby wyłączyć tę funkcję, należy edytować Xcode projektu Info.plist plik i ustawić FirebaseDeepLinkPasteboardRetrievalEnabled klucz do NO .

  1. W zakładce Info projektu Xcode Twojej aplikacji, należy utworzyć nowy typ adresu URL, który będzie używany na dynamiczne linki. Ustaw pole identyfikatora do wyjątkowej wartości i pola Schemat URL za swój Identyfikator pakietu, który jest domyślny schemat URL używany przez dynamiczne linki.
  2. W zakładce możliwości projektu Xcode Twojej aplikacji, włącz Associated Domeny i dodać następujące listy Associated dziedzinach:
    applinks:your_dynamic_links_domain
  3. Jeśli chcesz otrzymywać dynamiczne linki z domeny pełni niestandardowej , w projekcie Xcode za Info.plist pliku, utwórz klucz o nazwie FirebaseDynamicLinksCustomDomains i ustawić go do swojej aplikacji dynamiczne linki URL prefiksów. Na przykład:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Zaimportować moduł Firebase w UIApplicationDelegate :

    Szybki

    import Firebase

    Cel C

    @import Firebase;
  5. Skonfiguruj FirebaseApp wspólne wystąpienie, zazwyczaj w swojej aplikacji application:didFinishLaunchingWithOptions: metodę:

    Szybki

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Cel C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Następnie w application:continueUserActivity:restorationHandler: metoda uchwyt linki otrzymane jako uniwersalnego Odnośniki gdy aplikacja jest już zainstalowana (na iOS 9 i nowsze):

    Szybki

    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

    - (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;
    }
  7. Wreszcie w application:openURL:sourceApplication:annotation: (iOS 8 i starsze) i application:openURL:options: (iOS 9 i więcej) metod, uchwyt linki otrzymane przez Schemat niestandardowy URL swojej aplikacji. Te metody są wywoływane, gdy aplikacja otrzymuje łącze w systemie iOS 8 i starszym oraz gdy aplikacja jest otwierana po raz pierwszy po instalacji w dowolnej wersji systemu iOS.

    Jeśli Dynamic Link nie znajduje się na Twojej aplikacji pierwszego uruchomienia (w dowolnej wersji iOS), ta metoda zostanie wywołana z FIRDynamicLink „s url ustawionym na nil , co oznacza, że SDK nie udało się znaleźć pasujący do czasu Dynamic Link.

    Szybki

    @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

    - (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;
    }