Receber links dinâmicos no iOS

Para receber os Firebase Dynamic Links que você criou, inclua o SDK do Dynamic Links no seu app e chame os métodos handleUniversalLink: e dynamicLinkFromCustomSchemeURL: quando o app for carregado para receber 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.

  1. Adicione o Firebase ao projeto do iOS. Inclua o seguinte pod no seu 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 ID da App Store e o prefixo do ID do app estão especificados nas configurações dele. Para visualizar e editar as configurações do app, acesse a página Configurações do projeto do Firebase e selecione o app para iOS.

    Para confirmar se o projeto do Firebase está configurado corretamente para usar links dinâmicos 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 ID do app e ao ID do pacote do app. Exemplo:

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

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

  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 Xcode do seu app, ative "Domínios associados" e adicione o seguinte à lista Associated Domains:
    applinks:your_dynamic_links_domain
  3. Se você quiser receber links dinâmicos com um domínio totalmente personalizado, no arquivo Info.plist do projeto Xcode, crie uma chave chamada FirebaseDynamicLinksCustomDomains e defina-a para os prefixos de URL dos links dinâmicos do seu app. 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, normalmente no método application:didFinishLaunchingWithOptions: do seu app:

    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: , processe os links recebidos como links universais quando o aplicativo já estiver instalado (no iOS 9 e 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 e versões mais recentes), processe os links recebidos por meio do esquema de URL personalizado do seu app. Esses métodos são chamados quando o app recebe um link no iOS 8 e 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 na primeira inicialização do app (em qualquer versão do iOS), esse método será chamado com o url do FIRDynamicLink definido como nil, indicando que o SDK não conseguiu encontrar um 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;
    }