Dynamische Links unter iOS erhalten

Damit die von Ihnen erstellte Firebase Dynamic Links empfangen werden kann, müssen Sie das Dynamic Links SDK in Ihre App einbinden und beim Laden der App die Methoden handleUniversalLink: und dynamicLinkFromCustomSchemeURL: aufrufen, um die im Dynamic Link übergebenen Daten abzurufen.

Vorbereitung

Fügen Sie Ihrem iOS-Projekt Firebase hinzu, bevor Sie beginnen.

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 dem Bereich Other Linker Flags der Build-Einstellungen des Ziels hinzu.
  6. Für eine optimale Nutzung von Dynamic Links empfehlen wir, Google Analytics in Ihrem Firebase-Projekt zu aktivieren und Ihrer App das Firebase SDK für Google Analytics hinzuzufügen. Sie können entweder die Bibliothek ohne oder mit IDFA-Erfassung auswählen.
  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 Console den Bereich 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 in den App-Einstellungen angegeben sind. Rufen Sie zum Ansehen und Bearbeiten der App-Einstellungen die Seite „Einstellungen“ Ihres Firebase-Projekts auf und wählen Sie Ihre iOS-App aus.

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

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

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

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

    Wenn das Feld details leer ist, prüfen Sie, ob Sie das Präfix der Anwendungs-ID angegeben haben. Das Präfix der App-ID darf nicht mit Ihrer Team-ID identisch sein.

  3. Optional: Deaktiviere die Nutzung der iOS-Einfügen-Datei durch das Dynamic Links SDK.

    Standardmäßig verwendet das Dynamic Links SDK das Zwischenablage-Objekt, um die Zuverlässigkeit von Deeplinks nach der Installation zu verbessern. Über die Zwischenablage sorgt Dynamic Links dafür, dass Nutzer, die eine Dynamic Link öffnen, aber zuerst deine App installieren müssen, nach der Installation sofort zum ursprünglichen verknüpften Inhalt wechseln können, wenn sie die App zum ersten Mal öffnen.

    Der Nachteil dabei ist, dass die Verwendung des Zwischenspeichers unter iOS 14 und höher eine Benachrichtigung auslöst. Wenn Nutzer Ihre App zum ersten Mal öffnen und der Zwischenspeicher eine URL enthält, sehen sie eine Benachrichtigung, dass Ihre App auf den Zwischenspeicher 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, der für Dynamic Links verwendet werden soll. Legen Sie für das Feld ID einen eindeutigen Wert und für das Feld URL-Schema Ihre Bundle-ID fest. Dies ist das Standard-URL-Schema, das von Dynamic Links verwendet wird.
  2. Aktivieren Sie im Xcode-Projekt Ihrer App auf dem Tab Funktionen 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 einer vollständig benutzerdefinierten Domain empfangen möchten, erstellen Sie in der Info.plist-Datei 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 Modul FirebaseCore in Ihre UIApplicationDelegate sowie alle anderen Firebase-Module, die der 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 eine freigegebene Instanz von FirebaseApp in der application(_:didFinishLaunchingWithOptions:)-Methode Ihres App-Delegierten:

    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 ihn über UIApplicationDelegateAdaptor oder NSApplicationDelegateAdaptor an Ihre App-Struktur anhängen. Außerdem müssen Sie das 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. 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<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. Bearbeite in application:openURL:options: schließlich Links, die über das Schema für benutzerdefinierte URLs deiner App empfangen wurden. Diese Methode wird aufgerufen, wenn Ihre App nach der Installation zum ersten Mal geöffnet wird.

    Wenn die Dynamic Link beim ersten Starten Ihrer App nicht gefunden wird, wird diese Methode mit der url von DynamicLink auf nil gesetzt aufgerufen. Das bedeutet, dass das SDK keine übereinstimmende ausstehende 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<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;
    }