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 métodos handleUniversalLink: e dynamicLinkFromCustomSchemeURL: quando seu aplicativo for carregado para obter os dados transmitidos no Dynamic Link.

Pré-requisitos

Antes de começar, adicione o Firebase ao seu projeto iOS .

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

  1. No Xcode, com o projeto do seu aplicativo aberto, navegue até File > Add Packages .
  2. Quando solicitado, adicione o repositório SDK das plataformas Apple do Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Escolha a biblioteca Dynamic Links.
  5. Adicione o sinalizador -ObjC à seção Outros sinalizadores de vinculador das configurações de compilação do seu destino.
  6. Para uma experiência ideal com Dynamic Links, recomendamos ativar 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 coleção IDFA ou com coleção IDFA.
  7. 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 e o prefixo do App ID do seu 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 projeto do Firebase e selecione seu aplicativo iOS.

    Você pode confirmar se seu projeto do 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 o seu aplicativo estiver conectado, o arquivo apple-app-site-association conterá uma referência ao prefixo do 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 details estiver vazio, verifique novamente se você especificou o prefixo do ID do aplicativo. Observe que o prefixo do seu ID do aplicativo pode não ser igual ao seu 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 o pasteboard para melhorar a confiabilidade dos links diretos pós-instalação. Ao usar a área de trabalho, 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 original vinculado 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. Assim, na primeira vez que os usuários abrirem seu aplicativo, se a área de transferência contiver uma URL, eles verão uma notificação de que seu aplicativo acessou a área de transferência, o que pode causar confusão.

    Para desabilitar 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 com um valor exclusivo e o campo Esquema de URL como seu identificador de pacote, que é o esquema de URL padrão usado pelo Dynamic Links.
  2. Na guia Capacidades do projeto Xcode do seu aplicativo, habilite Domínios Associados e adicione o seguinte à lista Domínios Associados :
    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 com os prefixos de URL dos 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 que seu delegado de aplicativo usa. Por exemplo, para usar o Cloud Firestore e o Authentication:

    SwiftUI

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

    Rápido

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objetivo-C

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

    SwiftUI

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

    Rápido

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

    Objetivo-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Se estiver usando SwiftUI, você deve criar um delegado de aplicativo e anexá-lo à sua estrutura App via UIApplicationDelegateAdaptor ou NSApplicationDelegateAdaptor . Você também deve desativar o swizzling de delegado do 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. A seguir, no application:continueUserActivity:restorationHandler: :, manipule os links recebidos como links universais 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
    }
    

    Objetivo-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. Finalmente, em application:openURL:options: manipule links recebidos por meio do esquema de URL personalizado do seu aplicativo. Este método é chamado quando seu aplicativo é aberto pela primeira vez após a instalação.

    Se o Dynamic Link não for encontrado na primeira inicialização do seu aplicativo, esse método será chamado com o url do DynamicLink definido como nil , indicando que o SDK não conseguiu encontrar um Dynamic Link 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
    }
    

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