Erhalten Sie dynamische Links auf iOS

Um die von Ihnen erstellten dynamischen Firebase-Links zu erhalten, müssen Sie das Dynamic Links SDK in Ihre App einbinden und beim Laden Ihrer App die Methoden handleUniversalLink: und dynamicLinkFromCustomSchemeURL: aufrufen, um die im dynamischen Link übergebenen Daten abzurufen.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie Firebase zu Ihrem iOS-Projekt hinzufügen .

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

  1. Navigieren Sie in Xcode bei geöffnetem App-Projekt zu File > Add Packages .
  2. Wenn Sie dazu aufgefordert werden, fügen Sie das Firebase Apple Platforms SDK-Repository hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Wählen Sie die Dynamic Links-Bibliothek.
  5. Fügen Sie das Flag -ObjC zum Abschnitt „Andere Linker-Flags“ der Build-Einstellungen Ihres Ziels hinzu.
  6. Für ein optimales Erlebnis mit dynamischen Links empfehlen wir, Google Analytics in Ihrem Firebase-Projekt zu aktivieren und das Firebase SDK für Google Analytics zu Ihrer App hinzuzufügen. Sie können entweder die Bibliothek ohne IDFA-Sammlung oder mit IDFA-Sammlung auswählen.
  7. Wenn Sie fertig sind, beginnt Xcode automatisch mit der Auflösung und dem Herunterladen Ihrer Abhängigkeiten im Hintergrund.

Führen Sie nun einige Konfigurationsschritte aus:

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt „Dynamische Links“ . Akzeptieren Sie die Nutzungsbedingungen, wenn Sie dazu aufgefordert werden.
  2. Stellen Sie sicher, dass die App Store-ID und Ihr App-ID-Präfix in den Einstellungen Ihrer App angegeben sind. Um die Einstellungen Ihrer App anzuzeigen und zu bearbeiten, gehen Sie zur Seite „Einstellungen“ Ihres Firebase-Projekts und wählen Sie Ihre iOS-App aus.

    Sie können bestätigen, dass Ihr Firebase-Projekt ordnungsgemäß für die Verwendung dynamischer Links in Ihrer iOS-App 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 Datei apple-app-site-association einen Verweis auf das App-ID-Präfix und die Bundle-ID Ihrer App. Zum Beispiel:

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

    Wenn das details leer ist, überprüfen Sie noch einmal, ob Sie Ihr App-ID-Präfix angegeben haben. Beachten Sie, dass Ihr App-ID-Präfix möglicherweise nicht mit Ihrer Team-ID übereinstimmt.

  3. Optional : Deaktivieren Sie die Verwendung des iOS-Pasteboards durch das Dynamic Links SDK.

    Standardmäßig verwendet das Dynamic Links SDK das Pasteboard, um die Zuverlässigkeit von Deep Links nach der Installation zu verbessern. Durch die Verwendung des Pasteboards kann Dynamic Links sicherstellen, dass, wenn ein Benutzer einen Dynamic Link öffnet, aber zuerst Ihre App installieren muss, der Benutzer beim ersten Öffnen der App nach der Installation sofort zum ursprünglichen verknüpften Inhalt wechseln kann.

    Der Nachteil dabei ist, dass die Verwendung des Pasteboards unter iOS 14 und höher eine Benachrichtigung auslöst. Wenn Benutzer Ihre App zum ersten Mal öffnen und das Pasteboard eine URL enthält, wird ihnen eine Benachrichtigung angezeigt, dass Ihre App auf das Pasteboard zugegriffen hat, was zu Verwirrung führen kann.

    Um dieses Verhalten zu deaktivieren, bearbeiten Sie Info.plist Datei Ihres Xcode-Projekts und legen Sie den FirebaseDeepLinkPasteboardRetrievalEnabled -Schlüssel auf NO fest.

  1. Erstellen Sie auf der Registerkarte „Info“ des Xcode-Projekts Ihrer App einen neuen URL-Typ, der für dynamische Links verwendet werden soll. Legen Sie das Feld „Identifikator“ auf einen eindeutigen Wert und das Feld „URL-Schema“ auf Ihre Bundle-ID fest. Dabei handelt es sich um das von Dynamic Links verwendete Standard-URL-Schema.
  2. Aktivieren Sie auf der Registerkarte „Funktionen“ des Xcode-Projekts Ihrer App „Assoziierte Domänen“ und fügen Sie Folgendes zur Liste „Assoziierte Domänen“ hinzu:
    applinks:your_dynamic_links_domain
  3. Wenn Sie dynamische Links mit einer vollständig benutzerdefinierten Domäne erhalten möchten, erstellen Sie in Info.plist Datei Ihres Xcode-Projekts einen Schlüssel mit dem Namen FirebaseDynamicLinksCustomDomains und legen Sie ihn auf die URL-Präfixe für dynamische Links 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-Delegierter verwendet. Um beispielsweise Cloud Firestore und Authentifizierung zu verwenden:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Schnell

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Ziel c

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Konfigurieren Sie eine gemeinsam genutzte FirebaseApp Instanz in der application(_:didFinishLaunchingWithOptions:) Methode Ihres App-Delegierten:

    SwiftUI

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

    Schnell

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

    Ziel c

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Wenn Sie SwiftUI verwenden, müssen Sie einen Anwendungsdelegaten erstellen und ihn über UIApplicationDelegateAdaptor oder NSApplicationDelegateAdaptor an Ihre App Struktur anhängen. Sie müssen auch das Swizzling von App-Delegierten deaktivieren. Weitere Informationen finden Sie in den SwiftUI-Anweisungen .

    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 behandeln Sie in der application:continueUserActivity:restorationHandler: die empfangenen Links als universelle Links, wenn die App bereits installiert ist:

    Schnell

    Hinweis: Dieses Produkt ist nicht auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen 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
    }
    

    Ziel c

    Hinweis: Dieses Produkt ist nicht auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen 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. Schließlich verarbeiten Sie in application:openURL:options: Links, die über das benutzerdefinierte URL-Schema Ihrer App empfangen werden. Diese Methode wird aufgerufen, wenn Ihre App nach der Installation zum ersten Mal geöffnet wird.

    Wenn der Dynamic Link beim ersten Start Ihrer App nicht gefunden wird, wird diese Methode aufgerufen, wobei die url des DynamicLink auf nil gesetzt ist, was darauf hinweist, dass das SDK keinen passenden ausstehenden Dynamic Link gefunden hat.

    Schnell

    Hinweis: Dieses Produkt ist nicht auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen 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
    }
    

    Ziel c

    Hinweis: Dieses Produkt ist nicht auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen 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;
    }