Crea link dinamici su iOS

Puoi creare Dynamic Links brevi o lunghi con l'API Firebase Dynamic Links Builder. Questa API accetta un valore Dynamic Link lungo o un oggetto contenente parametri Dynamic Link e restituisce URL come gli esempi riportati di seguito:

https://example.com/link/WXYZ
https://example.page.link/WXYZ

Prerequisiti

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

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 di 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 del linker delle impostazioni di compilazione 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 a scaricare le tue dipendenze in background.

Ora, esegui alcuni passaggi di configurazione:

  1. Nella console Firebase, apri la sezione Dynamic Links.
  2. Se non hai ancora accettato i Termini di servizio e impostato un prefisso URI per Dynamic Links, fallo quando richiesto.

    Se hai già un prefisso URI Dynamic Links, prendine nota. Devi fornirlo quando crei in modo programmatico Dynamic Links.

  3. Consigliato: specifica i pattern URL consentiti nei link diretti e di fallback. In questo modo, eviti che parti non autorizzate creino Dynamic Links che reindirizzano dal tuo dominio a siti che non sono sotto il tuo controllo. Consulta Consentire pattern di URL specifici.
  4. 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 alla Pagina Impostazioni del progetto Firebase e seleziona l'app per iOS.

    Verifica che il progetto Firebase sia configurato correttamente per l'utilizzo di Dynamic Links nella tua app per iOS aprendo il file apple-app-site-association ospitato sul tuo Dynamic Links dominio. Firebase pubblicherà il file apple-app-site-association dalla radice del dominio e dalla sottodirectory .well-known. Ad esempio:

        https://example.com/apple-app-site-association
        https://example.com/.well-known/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":["/*"]}]}}

    Se la proprietà details è vuota, verifica di aver specificato il prefisso dell'ID app. Tieni presente che il prefisso dell'ID app potrebbe non corrispondere all'ID team.

Aggiungi Firebase alla tua app

  1. Importa il modulo FirebaseCore in UIApplicationDelegate, nonché eventuali altri moduli Firebase utilizzati dal tuo app delegate. 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;
    // ...
          
  2. Configura un'istanza condivisa FirebaseApp nel metodo application(_:didFinishLaunchingWithOptions:) del delegato dell'app:

    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];
  3. Se utilizzi SwiftUI, devi creare un delegato dell'applicazione e collegarlo alla tua struct App tramite UIApplicationDelegateAdaptor o NSApplicationDelegateAdaptor. Devi anche disattivare lo scambio del delegato dell'app. Per maggiori informazioni, consulta le istruzioni di SwiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

Utilizzare la console Firebase

Se vuoi generare un singolo Dynamic Link, a scopo di test o per consentire al tuo team di marketing di creare facilmente un link che possa essere utilizzato, ad esempio, in un post sui social media, il modo più semplice è visitare la console Firebase e crearne uno manualmente seguendo la procedura dettagliata.

Utilizzare l'API Builder per iOS

Puoi utilizzare l'API iOS Builder per creare Dynamic Links da parametri o per abbreviate un Dynamic Link lungo.

Per creare un Dynamic Link, crea un nuovo oggetto Dynamic Link e specifica i parametri Dynamic Link impostando le proprietà corrispondente dell'oggetto. Quindi, ottieni il link lungo dalla proprietà url dell'oggetto o il link breve chiamando shorten().

Il seguente esempio minimo crea un lungo Dynamic Link per https://www.example.com/my-page che si apre con la tua app iOS su iOS e l'app com.example.android su Android:

Swift

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix)
linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objective-C

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domainURIPrefix:dynamicLinksDomainURIPrefix];
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];

NSLog(@"The long URL is: %@", linkBuilder.url);

Per creare un breve Dynamic Link, crea un DynamicLinkComponents nello stesso modo e poi chiama shorten().

La creazione di un link breve richiede una chiamata di rete, quindi invece di restituire direttamente il link, shorten() accetta un gestore di completamento, che viene chiamato al completamento della richiesta. Ad esempio:

Swift

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Per impostazione predefinita, gli Dynamic Links brevi vengono generati con suffissi di link di 17 caratteri che rendono estremamente improbabile che un utente possa indovinare un Dynamic Link valido. Se, per il tuo caso d'uso, l'individuazione di un link breve da parte di un utente non compromette alcun danno, è preferibile generare suffissi con il tempo necessario per essere univoci, cosa che puoi fare impostando la proprietà dynamicLinkComponentsOptions:

Swift

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
linkBuilder.options = DynamicLinkComponentsOptions()
linkBuilder.options.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init];
linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort;
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Puoi utilizzare l'API Dynamic Link Builder per creare Dynamic Links con uno qualsiasi dei parametri supportati. Per informazioni dettagliate, consulta il riferimento all'API.

L'esempio seguente crea un elemento Dynamic Link con diversi parametri comuni impostati:

Swift

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix)

linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.iOSParameters.appStoreID = "123456789"
linkBuilder.iOSParameters.minimumAppVersion = "1.2.3"

linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
linkBuilder.androidParameters.minimumVersion = 123

linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut",
                                                                       medium: "social",
                                                                       campaign: "example-promo")

linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters()
linkBuilder.iTunesConnectParameters.providerToken = "123456"
linkBuilder.iTunesConnectParameters.campaignToken = "example-promo"

linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link"
linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!"
linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg"

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objective-C

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domainURIPrefix:dynamicLinksDomainURIPrefix];

linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.iOSParameters.appStoreID = @"123456789";
linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3";

linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];
linkBuilder.androidParameters.minimumVersion = 123;

linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc]
                                   initWithSource:@"orkut"
                                           medium:@"social"
                                         campaign:@"example-promo"];

linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init];
linkBuilder.iTunesConnectParameters.providerToken = @"123456";
linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo";

linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link";
linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!";
linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg";

NSLog(@"The long URL is: %@", linkBuilder.url);

Puoi impostare i parametri Dynamic Link con i seguenti oggetti e proprietà:

DynamicLinkComponents
link

Il link che verrà aperto dall'app. Specifica un URL che la tua app può gestire, in genere i contenuti o il payload dell&#39;app, che avvia una logica specifica per l&#39;app (ad esempio l&#39;accreditamento di un coupon all&#39;utente o la visualizzazione di una schermata di benvenuto). Questo link deve essere un URL ben formattato, codificato correttamente, utilizzare HTTP o HTTPS e non può essere un altro link dinamico.

prefissoURIdominio Il tuo prefisso URL Dynamic Link, che puoi trovare nella console Firebase. Un dominio Dynamic Link è simile ai seguenti esempi:
https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
URL di riserva Il link da aprire quando l'app non è installata. Specifica questo valore per fare qualcosa di diverso dall'installare l'app dal Play Store quando non è installata, ad esempio aprire la versione web mobile dei contenuti o mostrare una pagina promozionale per l'app.
minimumVersion Il versionCode della versione minima della tua app che può aprire il link. Se l&#39;app installata è una versione precedente, l&#39;utente viene indirizzato al Play Store per eseguire l&#39;upgrade dell&#39;app.
DynamicLinkIOSParameters
appStoreID L'ID App Store della tua app, utilizzato per indirizzare gli utenti all'App Store quando l'app non è installata
URL di riserva Il link da aprire quando l&#39;app non è installata. Specifica questa opzione se vuoi eseguire un'operazione diversa dall'installazione dell'app dall'App Store quando l'app non è installata, ad esempio aprire la versione dei contenuti per il web mobile o visualizzare una pagina promozionale per l'app.
customScheme Schema URL personalizzato dell'app, se definito essere diverso dall'ID pacchetto dell'app
iPadFallbackURL Il link da aprire sugli iPad quando l'app non è installata. Specifica questo valore per fare qualcosa di diverso dall'installare la tua app dall'App Store quando l'app non è installata, ad esempio aprire la versione web dei contenuti o mostrare una pagina promozionale per la tua app.
iPadBundleID L'ID pacchetto dell'app per iOS da utilizzare su iPad per aprire il link. L'app deve essere collegata al tuo progetto dalla pagina Panoramica della console Firebase.
minimumAppVersion Il numero di versione della versione minima della tua app che può aprire il link. Questo flag viene passato all'app quando viene aperta e l'app deve decidere cosa farne.
DynamicLinkNavigationInfoParameters
forcedRedirectEnabled Se impostato su "1", salta la pagina di anteprima dell'app quando viene aperto Dynamic Link e reindirizza all'app o allo Store. La pagina di anteprima dell'app (attivata per impostazione predefinita) può indirizzare gli utenti alla destinazione più appropriata in modo più affidabile quando aprono Dynamic Links nelle app. Tuttavia, se prevedi che un Dynamic Link venga aperto solo nelle app che possono aprire Dynamic Links in modo affidabile senza questa pagina, puoi disattivarla con questo parametro. Questo parametro influisce sul comportamento di Dynamic Link solo su iOS.
DynamicLinkSocialMetaTagParameters
titolo Il titolo da utilizzare quando il Dynamic Link viene condiviso in un post social.
descriptionText La descrizione da utilizzare quando Dynamic Link viene condiviso in un post sui social.
imageURL L'URL di un'immagine correlata a questo link. L'immagine deve essere di almeno 300 x 200 px e avere dimensioni inferiori a 300 KB.
DynamicLinkGoogleAnalyticsParameters
source
medium
campaign
term
content
Parametri di Dati di Google Play. Questi parametri (utm_source, utm_medium, utm_campaign, utm_term, utm_content) vengono trasmessi al Play Store e aggiunti al payload del link.
DynamicLinkItunesConnectAnalyticsParameters
providerToken
affiliateToken
campagnaToken
Parametri di analisi di iTunes Connect. Questi parametri (pt, at, ct) vengono trasmessi all'App Store.

Per accorciare un Dynamic Link lungo, passalo a shortenURL(url:options:) insieme a un oggetto DynamicLinkComponentsOptions se vuoi generare un link con un suffisso breve:

Swift

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
[FIRDynamicLinkComponents shortenURL:longLinkUrl
                             options:nil
                          completion:^(NSURL * _Nullable shortURL,
                                       NSArray<NSString *> * _Nullable warnings,
                                       NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];

Per impostazione predefinita, Dynamic Links utilizza l'identificatore del pacchetto dell'app come schema URL necessario per aprire l'applicazione. Ti consigliamo di mantenere questo valore predefinito per semplificare l'implementazione.

Tuttavia, gli sviluppatori che utilizzano già uno schema URL personalizzato per altri scopi potrebbero voler utilizzare lo stesso schema anche per il proprio Dynamic Links. In questo caso, puoi specificare un altro schema URL per il tuo Firebase Dynamic Links seguendo questa procedura:

  1. Quando configuri l'app, assicurati di specificare lo schema URL predefinito da utilizzare per l'applicazione prima di configurare l'istanza condivisa FirebaseApp:

    Swift

    Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication
                       .LaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = customURLScheme
      FirebaseApp.configure()
    
      return true
    }

    Objective-C

    Nota: questo prodotto Firebase non è disponibile sui target macOS, Mac Catalyst, tvOS o watchOS.
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
      [FIRApp configure];
    
      return YES;
    }
  2. Ogni volta che crei un Dynamic Link, devi specificare lo schema URL personalizzato utilizzato dalla tua app. Puoi farlo utilizzando la console Firebase, impostando customScheme nell'API Builder, specificando il parametro ius nell'URL o inviando il parametro iosCustomScheme all'API REST

Passaggi successivi

Ora che hai creato Dynamic Links, devi configurare la tua app in modo che riceva Dynamic Links e indirizzi gli utenti alla posizione corretta all'interno dell'app dopo che li ha aperti.

Per ricevere Dynamic Links nella tua app, consulta la documentazione per iOS, Android, C++ e Unity.