Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Receba links dinâmicos no iOS

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Para receber os Firebase Dynamic Links que você criou , você deve incluir o SDK do Dynamic Links em seu aplicativo e chamar os handleUniversalLink: e dynamicLinkFromCustomSchemeURL: quando seu aplicativo carregar para obter os dados passados ​​no Dynamic Link.

Pré-requisitos

Antes de começar, certifique-se de adicionar o Firebase ao seu projeto iOS .

Use o Swift Package Manager para instalar e gerenciar dependências do Firebase.

  1. No Xcode, com seu projeto de aplicativo aberto, navegue até File > Add Packages .
  2. Quando solicitado, adicione o repositório Firebase Apple Platform SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Escolha a biblioteca Dynamic Links.
  5. Para uma experiência ideal com Dynamic Links, recomendamos habilitar o Google Analytics em seu projeto do Firebase e adicionar o SDK do Firebase para Google Analytics ao seu aplicativo. Você pode selecionar a biblioteca sem coleta de IDFA ou com coleta de IDFA.
  6. Quando terminar, o Xcode começará automaticamente a resolver e baixar suas dependências em segundo plano.

Agora, execute algumas etapas de configuração:

  1. No console do Firebase , abra a seção Dynamic Links . Aceite os termos de serviço se for solicitado a fazê-lo.
  2. Certifique-se de que o ID da App Store do seu aplicativo e o prefixo do ID do aplicativo estejam especificados nas configurações do seu aplicativo. Para visualizar e editar as configurações do seu aplicativo, acesse a página Configurações do seu projeto Firebase e selecione seu aplicativo iOS.

    Você pode confirmar se seu projeto Firebase está configurado corretamente para usar Dynamic Links em seu aplicativo iOS abrindo o seguinte URL:

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

    Se seu aplicativo estiver conectado, o arquivo apple-app-site-association conterá uma referência ao prefixo de ID do aplicativo e ao ID do pacote do seu aplicativo. Por exemplo:

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

    Se o campo de details estiver vazio, verifique novamente se você especificou seu prefixo de ID do aplicativo. Observe que o prefixo do ID do aplicativo pode não ser o mesmo do ID da equipe.

  3. Opcional : desative o uso da área de transferência do iOS pelo SDK do Dynamic Links.

    Por padrão, o SDK do Dynamic Links usa a área de transferência para melhorar a confiabilidade dos links diretos pós-instalação. Ao usar a área de transferência, o Dynamic Links pode garantir que, quando um usuário abrir um Dynamic Link, mas precisar instalar seu aplicativo primeiro, o usuário possa ir imediatamente para o conteúdo vinculado original ao abrir o aplicativo pela primeira vez após a instalação.

    A desvantagem disso é que o uso da área de transferência aciona uma notificação no iOS 14 e posterior. Portanto, na primeira vez que os usuários abrirem seu aplicativo, se a área de transferência contiver um URL, eles verão uma notificação de que seu aplicativo acessou a área de transferência, o que pode causar confusão.

    Para desativar esse comportamento, edite o arquivo Info.plist do seu projeto Xcode e defina a chave FirebaseDeepLinkPasteboardRetrievalEnabled como NO .

  1. Na guia Informações do projeto Xcode do seu aplicativo, crie um novo tipo de URL a ser usado para links dinâmicos. Defina o campo Identificador como um valor exclusivo e o campo esquema de URL como seu identificador de pacote, que é o esquema de URL padrão usado pelos links dinâmicos.
  2. Na guia Capabilities do projeto Xcode do seu aplicativo, ative Associated Domains e adicione o seguinte à lista Associated Domains :
    applinks:your_dynamic_links_domain
  3. Se você deseja receber links dinâmicos com um domínio totalmente personalizado , no arquivo Info.plist do seu projeto Xcode, crie uma chave chamada FirebaseDynamicLinksCustomDomains e defina-a como os prefixos de URL de links dinâmicos do seu aplicativo. Por exemplo:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Importe o módulo FirebaseCore em seu UIApplicationDelegate , bem como quaisquer outros módulos Firebase usados ​​pelo delegado do aplicativo. Por exemplo, para usar Cloud Firestore e autenticação:

    SwiftUI

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

    Rápido

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Configure uma instância compartilhada do FirebaseApp no ​​método application(_:didFinishLaunchingWithOptions:) do delegado do seu aplicativo:

    SwiftUI

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

    Rápido

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Se você estiver usando SwiftUI, deverá criar um delegado de aplicativo e anexá-lo à sua estrutura de App por meio de UIApplicationDelegateAdaptor ou NSApplicationDelegateAdaptor . Você também deve desativar o swizzling de delegado de aplicativo. Para obter mais informações, consulte as instruções do SwiftUI .

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Em seguida, no método application:continueUserActivity:restorationHandler: :, trate os links recebidos como Universal Links quando o aplicativo já estiver instalado:

    Rápido

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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. Por fim, em application:openURL:options: lide com os links recebidos por meio do esquema de URL personalizado do seu aplicativo. Esse método é chamado quando seu aplicativo é aberto pela primeira vez após a instalação.

    Se o link dinâmico não for encontrado na primeira inicialização do seu aplicativo, esse método será chamado com o DynamicLink do link url definido como nil , indicando que o SDK falhou ao encontrar um link dinâmico pendente correspondente.

    Rápido

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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;
    }
,

Para receber os Firebase Dynamic Links que você criou , você deve incluir o SDK do Dynamic Links em seu aplicativo e chamar os handleUniversalLink: e dynamicLinkFromCustomSchemeURL: quando seu aplicativo carregar para obter os dados passados ​​no Dynamic Link.

Pré-requisitos

Antes de começar, certifique-se de adicionar o Firebase ao seu projeto iOS .

Use o Swift Package Manager para instalar e gerenciar dependências do Firebase.

  1. No Xcode, com seu projeto de aplicativo aberto, navegue até File > Add Packages .
  2. Quando solicitado, adicione o repositório Firebase Apple Platform SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Escolha a biblioteca Dynamic Links.
  5. Para uma experiência ideal com Dynamic Links, recomendamos habilitar o Google Analytics em seu projeto do Firebase e adicionar o SDK do Firebase para Google Analytics ao seu aplicativo. Você pode selecionar a biblioteca sem coleta de IDFA ou com coleta de IDFA.
  6. Quando terminar, o Xcode começará automaticamente a resolver e baixar suas dependências em segundo plano.

Agora, execute algumas etapas de configuração:

  1. No console do Firebase , abra a seção Dynamic Links . Aceite os termos de serviço se for solicitado a fazê-lo.
  2. Certifique-se de que o ID da App Store do seu aplicativo e o prefixo do ID do aplicativo estejam especificados nas configurações do seu aplicativo. Para visualizar e editar as configurações do seu aplicativo, acesse a página Configurações do seu projeto Firebase e selecione seu aplicativo iOS.

    Você pode confirmar se seu projeto Firebase está configurado corretamente para usar Dynamic Links em seu aplicativo iOS abrindo o seguinte URL:

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

    Se seu aplicativo estiver conectado, o arquivo apple-app-site-association conterá uma referência ao prefixo de ID do aplicativo e ao ID do pacote do seu aplicativo. Por exemplo:

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

    Se o campo de details estiver vazio, verifique novamente se você especificou seu prefixo de ID do aplicativo. Observe que o prefixo do ID do aplicativo pode não ser o mesmo do ID da equipe.

  3. Opcional : desative o uso da área de transferência do iOS pelo SDK do Dynamic Links.

    Por padrão, o SDK do Dynamic Links usa a área de transferência para melhorar a confiabilidade dos links diretos pós-instalação. Ao usar a área de transferência, o Dynamic Links pode garantir que, quando um usuário abrir um Dynamic Link, mas precisar instalar seu aplicativo primeiro, o usuário possa ir imediatamente para o conteúdo vinculado original ao abrir o aplicativo pela primeira vez após a instalação.

    A desvantagem disso é que o uso da área de transferência aciona uma notificação no iOS 14 e posterior. Portanto, na primeira vez que os usuários abrirem seu aplicativo, se a área de transferência contiver um URL, eles verão uma notificação de que seu aplicativo acessou a área de transferência, o que pode causar confusão.

    Para desativar esse comportamento, edite o arquivo Info.plist do seu projeto Xcode e defina a chave FirebaseDeepLinkPasteboardRetrievalEnabled como NO .

  1. Na guia Informações do projeto Xcode do seu aplicativo, crie um novo tipo de URL a ser usado para links dinâmicos. Defina o campo Identificador como um valor exclusivo e o campo esquema de URL como seu identificador de pacote, que é o esquema de URL padrão usado pelos links dinâmicos.
  2. Na guia Capabilities do projeto Xcode do seu aplicativo, ative Associated Domains e adicione o seguinte à lista Associated Domains :
    applinks:your_dynamic_links_domain
  3. Se você deseja receber links dinâmicos com um domínio totalmente personalizado , no arquivo Info.plist do seu projeto Xcode, crie uma chave chamada FirebaseDynamicLinksCustomDomains e defina-a como os prefixos de URL de links dinâmicos do seu aplicativo. Por exemplo:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. Importe o módulo FirebaseCore em seu UIApplicationDelegate , bem como quaisquer outros módulos Firebase usados ​​pelo delegado do aplicativo. Por exemplo, para usar Cloud Firestore e autenticação:

    SwiftUI

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

    Rápido

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. Configure uma instância compartilhada do FirebaseApp no ​​método application(_:didFinishLaunchingWithOptions:) do delegado do seu aplicativo:

    SwiftUI

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

    Rápido

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Se você estiver usando SwiftUI, deverá criar um delegado de aplicativo e anexá-lo à sua estrutura de App por meio de UIApplicationDelegateAdaptor ou NSApplicationDelegateAdaptor . Você também deve desativar o swizzling de delegado de aplicativo. Para obter mais informações, consulte as instruções do SwiftUI .

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  7. Em seguida, no método application:continueUserActivity:restorationHandler: :, trate os links recebidos como Universal Links quando o aplicativo já estiver instalado:

    Rápido

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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. Por fim, em application:openURL:options: lide com os links recebidos por meio do esquema de URL personalizado do seu aplicativo. Esse método é chamado quando seu aplicativo é aberto pela primeira vez após a instalação.

    Se o link dinâmico não for encontrado na primeira inicialização do seu aplicativo, esse método será chamado com o DynamicLink do link url definido como nil , indicando que o SDK falhou ao encontrar um link dinâmico pendente correspondente.

    Rápido

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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

    Observação: este produto não está disponível em destinos macOS, Mac Catalyst, tvOS ou 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;
    }