Dynamische Links unter iOS erhalten

Wenn Sie die Firebase Dynamic Links erhalten möchten, die Sie erstellt haben, müssen Sie das Dynamic Links SDK in Ihre App einbinden und die handleUniversalLink: und dynamicLinkFromCustomSchemeURL: Methoden aufrufen, wenn Ihre App geladen wird, um die in der Dynamic Link übergebenen Daten zu erhalten.

Vorbereitung

Bevor Sie beginnen, müssen Sie Firebase Ihrem iOS Projekt hinzufügen.

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

  1. Öffnen Sie Ihr App-Projekt und gehen Sie in Xcode zu File > Add Packages (Datei > 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 das Flag -ObjC im Bereich Other Linker Flags (Weitere Verknüpfungsmerker) der Build-Einstellungen Ihres Ziels hinzu.
  6. Für eine optimale Nutzung von Dynamic Links empfehlen wir die Aktivierung von Google Analytics in Ihrem Firebase-Projekt und das Hinzufügen des Firebase SDK für Google Analytics zu Ihrer App. Sie können entweder die Bibliothek ohne IDFA-Erfassung oder mit IDFA-Erfassung auswählen. Weitere Informationen finden Sie in unseren FAQs zur neuesten Organisation von Modulen im Google Analytics for Firebase SDK.
  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 Bereich. Akzeptieren Sie die Nutzungsbedingungen, wenn Sie dazu aufgefordert werden.
  2. Prüfen Sie, ob die App Store-ID und das App-ID-Präfix Ihrer App in den Einstellungen der App angegeben sind. Wenn Sie die Einstellungen Ihrer App aufrufen und bearbeiten möchten, rufen Sie die Seite Einstellungen Ihres Firebase-Projekts auf und wählen Sie Ihre iOS-App aus.

    Sie können bestätigen, dass Ihr Firebase-Projekt für die Verwendung von Dynamic Links in Ihrer iOS-App richtig konfiguriert ist, indem Sie die folgende URL öffnen:

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

    Wenn Ihre App verbunden ist, enthält die apple-app-site-association Datei einen Verweis auf das App-ID-Präfix und die Paket-ID Ihrer App. Beispiel:

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

    Wenn das Feld details leer ist, prüfen Sie noch einmal, ob Sie das App-ID-Präfix angegeben haben. Das App-ID-Präfix ist möglicherweise nicht mit Ihrer Team-ID identisch.

  3. Optional: Deaktivieren Sie die Verwendung der iOS Zwischenablage durch das Dynamic Links SDK.

    Standardmäßig verwendet das Dynamic Links SDK die Zwischenablage, um die Zuverlässigkeit von Deeplinks nach der Installation zu verbessern. Durch die Verwendung der Zwischenablage kann Dynamic Links dafür sorgen, dass Nutzer, die einen Dynamic Link öffnen, aber zuerst Ihre App installieren müssen, beim ersten Öffnen der App nach der Installation direkt zu den ursprünglich verlinkten Inhalten weitergeleitet werden.

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

    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 einen neuen URL-Typ für Dynamic Links. Legen Sie für das Feld Identifier (Kennung) einen eindeutigen Wert und für das Feld URL scheme (URL-Schema) Ihre Paket-ID fest. Das ist das Standard-URL-Schema, das von Dynamic Links verwendet wird.
  2. Aktivieren Sie auf dem Tab Capabilities (Funktionen) des Xcode-Projekts Ihrer App die Option „Associated Domains“ (Verknüpfte Domains) und fügen Sie der Liste Associated Domains Folgendes hinzu:
    applinks:your_dynamic_links_domain
  3. Wenn Sie Dynamic Links mit einer vollständig benutzerdefinierten Domain erhalten möchten, erstellen Sie in der Datei Info.plist Ihres Xcode-Projekts einen Schlüssel namens FirebaseDynamicLinksCustomDomains und legen Sie ihn auf die Dynamic Links URL-Präfixe Ihrer App fest. Beispiel:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
  4. Importieren Sie das FirebaseCore Modul in Ihr UIApplicationDelegate, sowie alle anderen Firebase-Module, die Ihr App-Delegate verwendet. Beispiel für die Verwendung von 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 eine FirebaseApp freigegebene Instanz in der application(_:didFinishLaunchingWithOptions:) Methode Ihres App-Delegates:

    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 ein App-Delegate erstellen und es an Ihre App Struktur über UIApplicationDelegateAdaptor oder NSApplicationDelegateAdaptor anhängen. Außerdem müssen Sie das Swizzling des App-Delegates 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. Verarbeiten Sie als Nächstes in der application:continueUserActivity:restorationHandler: Methode Links, die als universelle Links empfangen wurden, 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> *_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. Verarbeiten Sie schließlich in application:openURL:options: Links die über das benutzerdefinierte URL-Schema Ihrer App empfangen wurden. Diese Methode wird aufgerufen, wenn Ihre App nach der Installation zum ersten Mal geöffnet wird.

    Wenn der Dynamic Link beim ersten Starten Ihrer App nicht gefunden wird, wird diese Methode aufgerufen, wobei die DynamicLink's url auf nil gesetzt ist. Das bedeutet, dass das SDK keinen übereinstimmenden ausstehenden Dynamic Link gefunden hat.

    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 *)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;
    }