了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Erhalten Sie dynamische Links auf iOS

Um die von Ihnen erstellten Firebase Dynamic Links zu erhalten, müssen Sie das SDK für dynamische Links in Ihre App einschließen und die Methoden handleUniversalLink: und dynamicLinkFromCustomSchemeURL: aufrufen, wenn Ihre App geladen wird, um die Daten im dynamischen Link zu übergeben.

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-Plattform-SDK-Repository hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Wählen Sie die Bibliothek für dynamische Links.
  5. Für ein optimales Erlebnis mit dynamischen 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 IDFA-Sammlung oder mit IDFA-Sammlung auswählen.
  6. Wenn Sie fertig sind, beginnt Xcode automatisch mit dem Auflösen und Herunterladen Ihrer Abhängigkeiten im Hintergrund.

Führen Sie nun einige Konfigurationsschritte durch:

  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 Ihrer App 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 richtig konfiguriert ist, um dynamische Links in Ihrer iOS-App zu verwenden, 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 Bundle-ID Ihrer App. Zum Beispiel:

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

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

  3. Optional : Deaktivieren Sie die Verwendung des Dynamic Links SDK für die iOS-Einfügeablage.

    Standardmäßig verwendet das Dynamic Links SDK die Zwischenablage, um die Zuverlässigkeit von Deep Links nach der Installation zu verbessern. Durch die Verwendung der Zwischenablage können dynamische Links sicherstellen, dass, wenn ein Benutzer einen dynamischen Link öffnet, aber zuerst Ihre App installieren muss, der Benutzer beim ersten Öffnen der App nach der Installation sofort zum ursprünglich verlinkten Inhalt wechseln kann.

    Der Nachteil dabei ist, dass die Verwendung der Zwischenablage eine Benachrichtigung auf iOS 14 und höher auslöst. Wenn Benutzer Ihre App also zum ersten Mal öffnen und die Zwischenablage eine URL enthält, sehen sie eine Benachrichtigung, dass Ihre App auf die Zwischenablage 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 Schlüssel FirebaseDeepLinkPasteboardRetrievalEnabled 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. Setzen Sie das Feld Identifier auf einen eindeutigen Wert und das Feld URL-Schema auf Ihren Bundle-Identifikator, der das von Dynamic Links verwendete Standard-URL-Schema ist.
  2. Aktivieren Sie auf der Registerkarte „Funktionen“ des Xcode-Projekts Ihrer App „Associated Domains“ und fügen Sie Folgendes zur Liste „Associated Domains“ 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 namens FirebaseDynamicLinksCustomDomains und legen Sie ihn auf die URL-Präfixe für dynamische Links Ihrer App fest. Zum 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. So verwenden Sie beispielsweise Cloud Firestore und Authentifizierung:

    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 freigegebene FirebaseApp Instanz in der Methode application(_:didFinishLaunchingWithOptions:) Ihres App-Delegaten:

    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 anfügen. Sie müssen auch das Swizzling von App-Delegaten 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. Behandeln Sie als Nächstes in der application:continueUserActivity:restorationHandler: Links, die als universelle Links empfangen wurden, wenn die App bereits installiert ist:

    Schnell

    Hinweis: Dieses Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht 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 auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht 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, in application:openURL:options: Behandeln Sie 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 dynamische 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 dynamischen Link finden konnte.

    Schnell

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