Crie links dinâmicos no iOS

Você pode criar links dinâmicos curtos ou longos com a API Firebase Dynamic Links Builder. Esta API aceita um link dinâmico longo ou um objeto contendo parâmetros de link dinâmico e retorna URLs como nos exemplos a seguir:

https://example.com/link/WXYZ
https://example.page.link/WXYZ

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 .
  2. Se você ainda não aceitou os termos de serviço e definiu um prefixo de URI para seus Dynamic Links, faça-o quando solicitado.

    Se você já tiver um prefixo de URI do Dynamic Links, anote-o. Você precisa fornecê-lo ao criar links dinâmicos de maneira programática.

  3. Recomendado : especifique os padrões de URL permitidos em seus links diretos e links substitutos. Ao fazer isso, você evita que partes não autorizadas criem links dinâmicos que redirecionem do seu domínio para sites que você não controla. Consulte Permitir padrões de URL específicos .
  4. 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.

    Confirme se seu projeto do Firebase está configurado corretamente para usar Dynamic Links em seu aplicativo iOS abrindo o arquivo apple-app-site-association hospedado em seu domínio Dynamic Links. O Firebase servirá o arquivo apple-app-site-association da raiz do domínio, bem como o subdiretório .well-known . Por exemplo:

        https://example.com/apple-app-site-association
        https://example.com/.well-known/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":["/*"]}]}}

    Se a propriedade details estiver vazia, 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.

Adicione o Firebase ao seu aplicativo

  1. 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;
    // ...
          
  2. 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];
  3. Se estiver usando SwiftUI, você deve criar um delegado de aplicativo e anexá-lo à estrutura App por meio de 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()
          }
        }
      }
    }
          

Usar o console do Firebase

Se você deseja gerar um único link dinâmico, seja para fins de teste ou para que sua equipe de marketing crie facilmente um link que possa ser usado em algo como uma postagem em mídia social, a maneira mais simples seria visitar o console do Firebase e criar um manualmente seguindo o passo a passo.

Use a API do iOS Builder

Você pode usar a API iOS Builder para criar links dinâmicos a partir de parâmetros ou para encurtar um link dinâmico longo.

Para criar um link dinâmico, crie um novo objeto DynamicLinkComponents e especifique os parâmetros do link dinâmico definindo as propriedades correspondentes do objeto. Em seguida, obtenha o link longo da propriedade url do objeto ou obtenha o link curto chamando shorten() .

O exemplo mínimo a seguir cria um link dinâmico longo para https://www.example.com/my-page que abre com seu aplicativo iOS no iOS e o aplicativo com.example.android no Android:

Rápido

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix)
linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objetivo-C

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domainURIPrefix:dynamicLinksDomainURIPrefix];
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];

NSLog(@"The long URL is: %@", linkBuilder.url);

Para criar um link dinâmico curto, crie um DynamicLinkComponents da mesma maneira e, em seguida, chame shorten() .

Construir um link curto requer uma chamada de rede, portanto, em vez de retornar o link diretamente, shorten() aceita um manipulador de conclusão, que é chamado quando a solicitação é concluída. Por exemplo:

Rápido

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objetivo-C

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Por padrão, links dinâmicos curtos são gerados com sufixos de link de 17 caracteres que tornam extremamente improvável que alguém consiga adivinhar um link dinâmico válido. Se, para o seu caso de uso, não houver mal nenhum em alguém adivinhar com sucesso um link curto, talvez você prefira gerar sufixos que sejam tão longos quanto necessários para serem exclusivos, o que pode ser feito definindo a propriedade dynamicLinkComponentsOptions :

Rápido

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
linkBuilder.options = DynamicLinkComponentsOptions()
linkBuilder.options.pathLength = .short
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objetivo-C

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init];
linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort;
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL,
                                     NSArray<NSString *> * _Nullable warnings,
                                     NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];
      

Você pode usar a API Dynamic Link Builder para criar links dinâmicos com qualquer um dos parâmetros suportados. Consulte a referência da API para obter detalhes.

O exemplo a seguir cria um link dinâmico com vários parâmetros comuns definidos:

Rápido

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
guard let link = URL(string: "https://www.example.com/my-page") else { return }
let dynamicLinksDomainURIPrefix = "https://example.com/link"
let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix)

linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios")
linkBuilder.iOSParameters.appStoreID = "123456789"
linkBuilder.iOSParameters.minimumAppVersion = "1.2.3"

linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android")
linkBuilder.androidParameters.minimumVersion = 123

linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut",
                                                                       medium: "social",
                                                                       campaign: "example-promo")

linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters()
linkBuilder.iTunesConnectParameters.providerToken = "123456"
linkBuilder.iTunesConnectParameters.campaignToken = "example-promo"

linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link"
linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!"
linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg"

guard let longDynamicLink = linkBuilder.url else { return }
print("The long URL is: \(longDynamicLink)")

Objetivo-C

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"];
NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domainURIPrefix:dynamicLinksDomainURIPrefix];

linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
                             initWithBundleID:@"com.example.ios"];
linkBuilder.iOSParameters.appStoreID = @"123456789";
linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3";

linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
                                 initWithPackageName:@"com.example.android"];
linkBuilder.androidParameters.minimumVersion = 123;

linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc]
                                   initWithSource:@"orkut"
                                           medium:@"social"
                                         campaign:@"example-promo"];

linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init];
linkBuilder.iTunesConnectParameters.providerToken = @"123456";
linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo";

linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link";
linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!";
linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg";

NSLog(@"The long URL is: %@", linkBuilder.url);

Você pode definir parâmetros de link dinâmico com os seguintes objetos e propriedades:

Componentes DynamicLink
link

O link que seu aplicativo será aberto. Especifique um URL que seu aplicativo possa manipular, normalmente o conteúdo ou a carga útil do aplicativo, que inicia uma lógica específica do aplicativo (como creditar um cupom ao usuário ou exibir uma tela de boas-vindas). Este link deve ser um URL bem formatado, codificado corretamente em URL, usar HTTP ou HTTPS e não pode ser outro link dinâmico.

domínioURIPrefix Seu prefixo de URL do link dinâmico, que você pode encontrar no console do Firebase. Um domínio Dynamic Link se parece com os seguintes exemplos:
https://example.com/link
https://example.page.link
Parâmetros DynamicLinkAndroid
URL substituto O link a ser aberto quando o aplicativo não estiver instalado. Especifique isso para fazer algo diferente de instalar seu aplicativo da Play Store quando o aplicativo não estiver instalado, como abrir a versão web móvel do conteúdo ou exibir uma página promocional para seu aplicativo.
versão mínima O versionCode da versão mínima do seu aplicativo que pode abrir o link. Caso o app instalado seja de uma versão mais antiga, o usuário é levado à Play Store para atualizar o app.
Parâmetros DynamicLinkIOS
appStoreID O ID da App Store do seu aplicativo, usado para enviar usuários à App Store quando o aplicativo não está instalado
URL substituto O link a ser aberto quando o aplicativo não estiver instalado. Especifique isso para fazer algo diferente de instalar seu aplicativo da App Store quando o aplicativo não estiver instalado, como abrir a versão web móvel do conteúdo ou exibir uma página promocional para seu aplicativo.
esquema personalizado O esquema de URL personalizado do seu aplicativo, se definido como algo diferente do ID do pacote do seu aplicativo
URL de retorno do iPad O link para abrir em iPads quando o aplicativo não estiver instalado. Especifique isso para fazer algo diferente de instalar seu aplicativo da App Store quando o aplicativo não estiver instalado, como abrir a versão web do conteúdo ou exibir uma página promocional para seu aplicativo.
iPadBundleID O ID do pacote do aplicativo iOS a ser usado em iPads para abrir o link. O aplicativo deve estar conectado ao seu projeto na página Visão geral do console do Firebase.
mínimoAppVersion O número da versão mínima do seu aplicativo que pode abrir o link. Esse sinalizador é passado para seu aplicativo quando ele é aberto, e seu aplicativo deve decidir o que fazer com ele.
DynamicLinkNavigationInfoParameters
forçadoRedirectEnabled Se definido como '1', pule a página de visualização do aplicativo quando o link dinâmico for aberto e, em vez disso, redirecione para o aplicativo ou loja. A página de visualização do aplicativo (ativada por padrão) pode enviar os usuários de maneira mais confiável ao destino mais apropriado quando eles abrem links dinâmicos em aplicativos; no entanto, se você espera que um link dinâmico seja aberto apenas em aplicativos que podem abrir links dinâmicos de maneira confiável sem essa página, você pode desativá-lo com este parâmetro. Este parâmetro afetará o comportamento do Dynamic Link apenas no iOS.
Parâmetros DynamicLinkSocialMetaTag
título O título a ser usado quando o link dinâmico é compartilhado em uma postagem social.
descriçãoTexto A descrição a ser usada quando o link dinâmico é compartilhado em uma postagem social.
imagem URL O URL de uma imagem relacionada a este link. A imagem deve ter pelo menos 300x200 px e menos de 300 KB.
Parâmetros DynamicLinkGoogleAnalytics
fonte
médio
campanha
prazo
contente
Parâmetros analíticos do Google Play. Esses parâmetros ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) são passados ​​para a Play Store e também anexados à carga útil do link.
Parâmetros DynamicLinkItunesConnectAnalytics
provedorToken
afiliadoToken
campanhaToken
Parâmetros analíticos do iTunes Connect. Esses parâmetros ( pt , at , ct ) são passados ​​para a App Store.

Para encurtar um link dinâmico longo, passe o link dinâmico longo para shortenURL(url:options:) junto com um objeto DynamicLinkComponentsOptions se desejar gerar um link com um sufixo curto:

Rápido

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objetivo-C

Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
[FIRDynamicLinkComponents shortenURL:longLinkUrl
                             options:nil
                          completion:^(NSURL * _Nullable shortURL,
                                       NSArray<NSString *> * _Nullable warnings,
                                       NSError * _Nullable error) {
  if (error || shortURL == nil) { return; }
  NSLog(@"The short URL is: %@", shortURL);
}];

Por padrão, o Dynamic Links usa o identificador de pacote do seu aplicativo como o esquema de URL necessário para abrir seu aplicativo. Recomendamos permanecer com esse valor padrão para manter sua implementação simples.

No entanto, os desenvolvedores que já usam um esquema de URL personalizado para outras finalidades também podem querer usar esse mesmo esquema de URL personalizado para seus links dinâmicos. Se você estiver nessa situação, poderá especificar um esquema de URL diferente para seus Firebase Dynamic Links seguindo estas etapas:

  1. Ao configurar seu aplicativo, especifique o esquema de URL padrão a ser usado pelo aplicativo antes de configurar a instância compartilhada FirebaseApp :

    Rápido

    Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication
                       .LaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = customURLScheme
      FirebaseApp.configure()
    
      return true
    }
    

    Objetivo-C

    Observação: este produto Firebase não está disponível em destinos macOS, Mac Catalyst, tvOS ou watchOS.
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME;
      [FIRApp configure];
    
      return YES;
    }
  2. Sempre que criar qualquer link dinâmico, você precisará especificar o esquema de URL personalizado que seu aplicativo usa. Você pode fazer isso por meio do console do Firebase, definindo customScheme na Builder API, especificando o parâmetro ius em sua URL ou enviando o parâmetro iosCustomScheme para a API REST

Próximos passos

Agora que você criou Dynamic Links, você precisa configurar seu aplicativo para receber Dynamic Links e enviar os usuários ao lugar certo em seu aplicativo depois que um usuário os abrir.

Para receber links dinâmicos em seu aplicativo, consulte a documentação para iOS , Android , C++ e Unity .