Confira tudo que foi anunciado no Firebase Summit e veja como usar o Firebase para acelerar o desenvolvimento de apps e executar os aplicativos com confiança. Saiba mais

Receba links dinâmicos no iOS

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;
    }