Dynamische Links unter iOS erhalten

Um die Firebase Dynamic Links zu erhalten, die verwenden, müssen Sie das Dynamic Links SDK in Ihre App einbinden und die Methode handleUniversalLink: und dynamicLinkFromCustomSchemeURL: , wenn Ihre App geladen wird, um die im Dynamic Link übergebenen Daten abzurufen.

Vorbereitung

Fügen Sie Ihrem iOS-Gerät Firebase hinzu, Projekt.

Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.

  1. Gehen Sie in Xcode bei geöffnetem App-Projekt zu File > Pakete hinzufügen.
  2. Fügen Sie bei entsprechender Aufforderung das Firebase Apple Platforms SDK-Repository hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Wählen Sie die Dynamic Links-Bibliothek aus.
  5. Fügen Sie in den Build-Einstellungen des Ziels im Bereich Other Linker Flags das Flag -ObjC hinzu.
  6. Für eine optimale Nutzung von Dynamic Links empfehlen wir Google Analytics wird aktiviert in Ihrem Firebase-Projekt und fügen Ihrer App das Firebase SDK für Google Analytics hinzu. Sie können wählen Sie entweder die Bibliothek ohne IDFA-Sammlung oder mit IDFA-Sammlung aus.
  7. Wenn Sie fertig, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.

Führen Sie nun einige Konfigurationsschritte aus:

  1. Öffnen Sie in der Firebase-Konsole den Dynamic Links. . Akzeptieren Sie die Nutzungsbedingungen, wenn Sie dazu aufgefordert werden.
  2. Achten Sie darauf, dass die App Store-ID und das App-ID-Präfix Ihrer App App-Einstellungen festgelegt ist. Wenn Sie die Einstellungen Ihrer App aufrufen und bearbeiten möchten, gehen Sie zu auf das Einstellungen und wählen Sie Ihre iOS-App aus.

    Sie können prüfen, ob Ihr Firebase-Projekt für die Verwendung von Dynamic Links in Ihrer iOS-App richtig konfiguriert ist. Öffnen Sie dazu die folgende URL:

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

    Wenn deine App verbunden ist, enthält die Datei apple-app-site-association eine Referenz an das App-ID-Präfix und die Bundle-ID Ihrer App an. Beispiel:

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

    Wenn das Feld details leer ist, prüfen Sie noch einmal, ob Ihre Angaben Ihr App-ID-Präfix. Das Präfix der App-ID darf nicht mit Ihrer Team-ID identisch sein.

  3. Optional: Deaktivieren Sie im Dynamic Links SDK die Verwendung des iOS- in die Zwischenablage einfügen.

    Standardmäßig verwendet das Dynamic Links SDK die Zwischenablage, um die sind die Deeplinks nach der Installation zuverlässig. Über die Zwischenablage können Dynamic Links kann dafür sorgen, dass ein Nutzer Dynamic Link öffnet, aber Ihre Datei kann der Nutzer sofort zu den ursprünglich verlinkten Inhalten wechseln, wenn die App nach der Installation zum ersten Mal geöffnet wird.

    Der Nachteil ist, dass durch die Verwendung der unter iOS 14 und höher. Wenn Nutzende Ihre App zum ersten Mal öffnen, enthält die Zwischenablage eine URL, wird eine Benachrichtigung angezeigt, App auf die Zwischenablage zugegriffen hat, was zu Verwirrung führen kann.

    Wenn Sie dieses Verhalten deaktivieren möchten, bearbeiten Sie die Datei Info.plist Ihres Xcode-Projekts und legen Sie den Schlüssel FirebaseDeepLinkPasteboardRetrievalEnabled auf NO fest.

  1. Erstellen Sie auf dem Tab Info des Xcode-Projekts Ihrer App ein neues URL-Typ, der für Dynamic Links verwendet werden soll. Legen Sie die ID in einen eindeutigen Wert und das Feld URL-Schema, ist Ihr Paket-Identifikator (das Standard-URL-Schema, das von Dynamic Links verwendet wird).
  2. Aktivieren Sie auf dem Tab Funktionen des Xcode-Projekts Ihrer App die Option „Verknüpfte Domains“ und fügen Sie der Liste Verknüpfte Domains Folgendes hinzu:
    applinks:your_dynamic_links_domain
  3. Wenn Sie Dynamic Links mit einem vollständig benutzerdefinierte Domain, in in der Datei Info.plist Ihres Xcode-Projekts einen Schlüssel namens FirebaseDynamicLinksCustomDomains und lege fest, Dynamic Links URL-Präfixe. Beispiel:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
  4. Importieren Sie das Modul FirebaseCore in Ihr UIApplicationDelegate sowie alle anderen Firebase-Module, die Ihr App-Delegate verwendet. So verwenden Sie beispielsweise Cloud Firestore und 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;
    // ...
          
  5. Konfigurieren Sie ein FirebaseApp freigegebene Instanz im Methode application(_:didFinishLaunchingWithOptions:):

    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];
  6. Wenn Sie SwiftUI verwenden, müssen Sie einen Anwendungsdelegierten erstellen und diesen anhängen. zu deiner App-Struktur über UIApplicationDelegateAdaptor oder NSApplicationDelegateAdaptor Außerdem müssen Sie App Delegate Swizzling deaktivieren. Weitere Informationen finden Sie in der SwiftUI-Anleitung.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Als Nächstes werden in der Methode application:continueUserActivity:restorationHandler: empfangene Links als verarbeitet. Universelle Links, wenn die App bereits installiert ist:

    Swift

    Hinweis:Dieses Produkt ist nicht für macOS-, Mac Catalyst-, tvOS- oder watchOS-Ziele verfügbar.
    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

    Hinweis:Dieses Produkt ist nicht für macOS-, Mac Catalyst-, tvOS- oder watchOS-Ziele verfügbar.
    - (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. Handle-Links in application:openURL:options: die über das Schema für benutzerdefinierte URLs Ihrer App empfangen werden. Diese Methode wird aufgerufen, Ihre App nach der Installation zum ersten Mal geöffnet wird.

    Wenn die Dynamic Link beim ersten Start deiner App nicht gefunden wird, wird diese Methode mit dem Der url von DynamicLink wurde auf nil festgelegt, was darauf hindeutet, dass das SDK konnte keinen passenden ausstehenden Dynamic Link finden.

    Swift

    Hinweis:Dieses Produkt ist nicht für macOS-, Mac Catalyst-, tvOS- oder watchOS-Ziele verfügbar.
    @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

    Hinweis:Dieses Produkt ist nicht für macOS-, Mac Catalyst-, tvOS- oder watchOS-Ziele verfügbar.
    - (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;
    }