Ricevi link dinamici su iOS

Per ricevere Firebase Dynamic Links che creato, devi includere l'SDK Dynamic Links nell'app e chiamare il metodo handleUniversalLink: e dynamicLinkFromCustomSchemeURL: al momento del caricamento dell'app per ottenere i dati passati nel file Dynamic Link.

Prerequisiti

Prima di iniziare, assicurati di aggiungere Firebase al tuo account iOS progetto.

Utilizza Swift Package Manager per installare e gestire le dipendenze di Firebase.

  1. In Xcode, con il progetto dell'app aperto, vai a File > Aggiungi pacchetti.
  2. Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Scegli la raccolta Dynamic Links.
  5. Aggiungi il flag -ObjC alla sezione Altri flag linker delle impostazioni di build del target.
  6. Per un'esperienza ottimale con Dynamic Links, ti consigliamo di attivare Google Analytics nel tuo progetto Firebase e di aggiungere l'SDK Firebase per Google Analytics alla tua app. Puoi selezionare la libreria senza raccolta IDFA o con raccolta IDFA.
  7. Al termine, Xcode inizierà automaticamente a risolvere e scaricare il le dipendenze in background.

Ora, esegui alcuni passaggi di configurazione:

  1. Nella console Firebase, apri Dynamic Links. . Accetta i Termini di servizio, se ti viene richiesto.
  2. Assicurati che l'ID App Store e il prefisso dell'ID app siano specificati nelle impostazioni dell'app. Per visualizzare e modificare le impostazioni dell'app, vai a alle risorse del tuo progetto Firebase Impostazioni e seleziona la tua app per iOS.

    Puoi verificare che il tuo progetto Firebase sia configurato correttamente per l'utilizzo di Dynamic Links nella tua app per iOS aprendo il seguente URL:

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

    Se la tua app è collegata, il file apple-app-site-association contiene un riferimento al prefisso dell'ID app e all'ID pacchetto dell'app. Ad esempio:

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

    Se il campo details è vuoto, verifica di aver specificato il prefisso dell'ID app. Tieni presente che il prefisso dell'ID app potrebbe non corrispondere all'ID team.

  3. Facoltativo: disattiva l'utilizzo del portacollana di iOS da parte dell'SDK Dynamic Links.

    Per impostazione predefinita, l'SDK Dynamic Links utilizza la clipboard per migliorare l'affidabilità dei link diretti post-installazione. Utilizzando la bacheca, Dynamic Links puoi assicurarti che quando un utente apre un Dynamic Link, ma deve prima installare la tua app, possa passare immediatamente ai contenuti collegati originali quando apre l'app per la prima volta dopo l'installazione.

    Lo svantaggio è che l'utilizzo della clipboard attiva una notifica su iOS 14 e versioni successive. Quindi, la prima volta che gli utenti aprono la tua app, se la tabella contiene un URL, verrà visualizzata una notifica che indica che l'app ha eseguito l'accesso all'editor di codice, il che può causare confusione.

    Per disattivare questo comportamento, modifica il file Info.plist del progetto Xcode e imposta la chiave FirebaseDeepLinkPasteboardRetrievalEnabled su NO.

  1. Nella scheda Informazioni del progetto Xcode dell'app, crea un nuovo tipo di URL da utilizzare per Dynamic Links. Imposta il parametro Identificatore a un valore univoco e il campo Schema URL su l'identificatore pacchetto, ovvero lo schema URL predefinito utilizzato da Dynamic Links.
  2. Nella scheda Funzionalità del progetto Xcode dell'app, attiva i domini associati e aggiungi quanto segue all'elenco Domini associati:
    applinks:your_dynamic_links_domain
  3. Se vuoi ricevere Dynamic Links con un dominio completamente personalizzato, nel file Info.plist del progetto Xcode, crea una chiave chiamata FirebaseDynamicLinksCustomDomains e impostala sui prefissi URL Dynamic Links della tua app. Ad esempio:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Importa il modulo FirebaseCore nel tuo UIApplicationDelegate e tutti gli altri Moduli Firebase utilizzati dal delegato della tua app. Ad esempio, per utilizzare Cloud Firestore e 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. Configura un FirebaseApp nel delegato della tua applicazione Metodo 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. Se utilizzi SwiftUI, devi creare un delegato per l'applicazione e collegarlo al tuo struct App tramite UIApplicationDelegateAdaptor oppure NSApplicationDelegateAdaptor. Devi anche disattivare lo swizzling del delegato dell'app. Per Per ulteriori informazioni, consulta le istruzioni di SwiiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Successivamente, nel metodo application:continueUserActivity:restorationHandler: , gestisci i link ricevuti come link universali quando l'app è già installata:

    Swift

    Nota: questo prodotto non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
    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

    Nota: questo prodotto non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
    - (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. Infine, in application:openURL:options:, gli handle dei link ricevuto tramite lo schema URL personalizzato dell'app. Questo metodo viene chiamato la tua app viene aperta per la prima volta dopo l'installazione.

    Se Dynamic Link non viene trovato al primo avvio dell'app, questo metodo verrà chiamato con url di Dynamic Link impostato su nil, a indicare che l'SDK non è riuscito a trovare un Dynamic Link in attesa corrispondente.

    Swift

    Nota: questo prodotto non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
    @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

    Nota: questo prodotto non è disponibile sulle destinazioni macOS, Mac Catalyst, tvOS o watchOS.
    - (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;
    }