Ir para o console

Receber links dinâmicos no iOS

Para receber os links dinâmicos do Firebase que você criou, inclua o SDK do Dynamic Links no seu aplicativo e chame os métodos handleUniversalLink: e dynamicLinkFromCustomSchemeURL: quando o aplicativo for carregado para acessar os dados transmitidos no link dinâmico.

Pré-requisitos

O Firebase Dynamic Links requer o iOS 8 ou posterior. É possível direcionar para o iOS 7 em seu app, mas todas as chamadas do SDK do Firebase Dynamic Links ficarão em ambiente autônomo se o aplicativo não for executado no iOS 8 ou mais recente.

Configurar o Firebase e o SDK do Dynamic Links

  1. Adicione o Firebase ao seu projeto do iOS. Inclua este pod no Podfile:
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
  2. Execute pod install e abra o arquivo .xcworkspace criado.
  3. No Console do Firebase, abra a seção Dynamic Links. Se solicitado, aceite os Termos de Serviço.
  4. Verifique se o código da App Store e o prefixo do código do app estão especificados nas configurações do aplicativo. Para visualizar e editar as configurações do app, acesse a página Configurações do projeto Firebase e selecione o app iOS.

    Para confirmar se o projeto do Firebase está configurado corretamente para usar o Dynamic Links no app para iOS, abra o seguinte URL:

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

    Se o app estiver conectado, o arquivo apple-app-site-association conterá uma referência ao prefixo do código do app e ao código do pacote. Por exemplo:

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

    Se o campo details estiver vazio, verifique novamente se você especificou o prefixo do código do app. Pode ser que ele não seja igual ao código da sua equipe.

Abrir links dinâmicos no seu app

  1. Na guia Info do projeto Xcode do seu app, crie um novo tipo de URL a ser usado para links dinâmicos. Defina o campo Identifier como um valor exclusivo e o campo URL scheme para ser seu identificador do pacote, que é o esquema de URL padrão usado pelo Dynamic Links.
  2. Na guia Capabilities do projeto do Xcode do seu app, ative "Domínios associados" e adicione o seguinte à lista Associated Domains:
    applinks:your_dynamic_links_domain
  3. Se você quer receber links dinâmicos com um domínio totalmente personalizado, no arquivo Info.plist do projeto do Xcode, crie uma chave com o nome 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 do Firebase no UIApplicationDelegate:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  5. Configure uma instância compartilhada do FirebaseApp, que é normalmente encontrada no método application:didFinishLaunchingWithOptions::

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. Em seguida, no método application:continueUserActivity:restorationHandler: , gerencie os links recebidos como links universais quando o app já estiver instalado (no iOS 9 ou em versões mais recentes):

    Swift

    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

    - (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;
    }
  7. Por fim, nos métodos application:openURL:sourceApplication:annotation: (iOS 8 e versões anteriores) e application:openURL:options: (iOS 9 versões posteriores), processe links recebidos pelo esquema de URL personalizado do app. Esses métodos são chamados quando o app recebe um link no iOS 8 e em versões anteriores e quando ele é aberto pela primeira vez após a instalação em qualquer versão do iOS.

    Se o link dinâmico não for encontrado no primeiro lançamento do seu app em qualquer versão do iOS, este método será chamado com o url do FIRDynamicLink definido como nil. Isso indica que o SDK não conseguiu encontrar uma correspondência de link dinâmico pendente.

    Swift

    @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

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