Estado de passagem em ações de e-mail

Você pode passar o estado por meio de um URL de continuação ao enviar ações de e-mail para redefinições de senha ou verificar o e-mail de um usuário. Isso fornece ao usuário a capacidade de retornar ao aplicativo após a conclusão da ação. Além disso, você pode especificar se deseja manipular o link de ação de e-mail diretamente de um aplicativo móvel quando ele estiver instalado, em vez de uma página da web.

Isso pode ser extremamente útil nos seguintes cenários comuns:

  • Um usuário que não está conectado no momento pode estar tentando acessar conteúdo que exige que ele esteja conectado. No entanto, o usuário pode ter esquecido sua senha e, portanto, acionar o fluxo de redefinição de senha. Ao final do fluxo, o usuário espera voltar para a seção do aplicativo que estava tentando acessar.

  • Um aplicativo só pode oferecer acesso a contas verificadas. Por exemplo, um aplicativo de boletim informativo pode exigir que o usuário verifique seu e-mail antes de assinar. O usuário passaria pelo fluxo de verificação de e-mail e esperaria retornar ao aplicativo para concluir a assinatura.

  • Em geral, quando um usuário inicia um fluxo de redefinição de senha ou verificação de e-mail em um aplicativo da Apple, ele espera concluir o fluxo dentro do aplicativo; a capacidade de passar o estado por meio do URL de continuação torna isso possível.

Ter a capacidade de transmitir o estado por meio de um URL de continuação é um recurso poderoso que o Firebase Auth oferece e que pode melhorar significativamente a experiência do usuário.

Passando URL de estado/continuação em ações de e-mail

Para transmitir com segurança um URL de continuação, o domínio do URL precisará estar na lista de permissões no Console do Firebase . Isso é feito na seção Autenticação adicionando este domínio à lista de domínios autorizados na guia Método de login , se ainda não estiver lá.

Uma instância FIRActionCodeSettings precisa ser fornecida ao enviar um email de redefinição de senha ou um email de verificação. Esta interface leva os seguintes parâmetros:

Rápido

Parâmetro Tipo Descrição
URL Corda

Define o link (URL de estado/continuação) que tem significados diferentes em contextos diferentes:

  • Quando o link é manipulado nos widgets de ação da web, esse é o link direto no parâmetro de consulta continueUrl .
  • Quando o link é manipulado diretamente no aplicativo, esse é o parâmetro de consulta continueUrl no link direto do link dinâmico.
iOSBundleID Corda Define o ID do pacote. Isso tentará abrir o link em um aplicativo da Apple, se estiver instalado. O aplicativo precisa ser registrado no Console. Se nenhum ID de pacote for fornecido, o valor deste campo será definido como o ID do pacote principal do aplicativo.
androidPackageName Corda Define o nome do pacote Android. Isso tentará abrir o link em um aplicativo Android, se estiver instalado.
androidInstallIfNotAvailable Bool Especifica se o aplicativo Android deve ser instalado se o dispositivo for compatível e o aplicativo ainda não estiver instalado. Se este campo for fornecido sem um packageName, será gerado um erro explicando que o packageName deve ser fornecido em conjunto com este campo.
androidMinimumVersion Corda A versão mínima do aplicativo compatível com esse fluxo. Se mínimaVersion for especificada e uma versão mais antiga do aplicativo estiver instalada, o usuário será levado à Play Store para atualizar o aplicativo. O aplicativo Android precisa ser registrado no Console.
handleCodeInApp Bool Se o link de ação do e-mail será aberto primeiro em um aplicativo móvel ou em um link da web. O padrão é falso. Quando definido como verdadeiro, o link do código de ação será enviado como um link universal ou link do aplicativo Android e será aberto pelo aplicativo, se instalado. No caso falso, o código será enviado primeiro para o widget da web e, em seguida, continuará redirecionando para o aplicativo, se instalado.
dynamicLinkDomain Corda Define o domínio (ou subdomínio) do link dinâmico a ser usado para o link atual se ele for aberto usando o Firebase Dynamic Links. Como vários domínios de link dinâmico podem ser configurados por projeto, este campo oferece a capacidade de escolher explicitamente um. Se nenhum for fornecido, o primeiro domínio será usado por padrão.

Objetivo-C

Parâmetro Tipo Descrição
URL NSString

Define o link (URL de estado/continuação) que tem significados diferentes em contextos diferentes:

  • Quando o link é manipulado nos widgets de ação da web, esse é o link direto no parâmetro de consulta continueUrl .
  • Quando o link é manipulado diretamente no aplicativo, esse é o parâmetro de consulta continueUrl no link direto do link dinâmico.
iOSBundleID NSString Define o ID do pacote. Isso tentará abrir o link em um aplicativo da Apple, se estiver instalado. O aplicativo precisa ser registrado no Console.
androidPackageName NSString Define o nome do pacote Android. Isso tentará abrir o link em um aplicativo Android, se estiver instalado.
androidInstallIfNotAvailable BOOL especifica se o aplicativo Android deve ser instalado se o dispositivo for compatível e o aplicativo ainda não estiver instalado. Se este campo for fornecido sem um packageName, será gerado um erro explicando que o packageName deve ser fornecido em conjunto com este campo.
androidMinimumVersion NSString A versão mínima do aplicativo compatível com esse fluxo. Se mínimaVersion for especificada e uma versão mais antiga do aplicativo estiver instalada, o usuário será levado à Play Store para atualizar o aplicativo. O aplicativo Android precisa ser registrado no Console.
handleCodeInApp BOOL Se o link de ação do e-mail será aberto primeiro em um aplicativo móvel ou em um link da web. O padrão é falso. Quando definido como verdadeiro, o link do código de ação será enviado como um link universal ou link do aplicativo Android e será aberto pelo aplicativo, se instalado. No caso falso, o código será enviado primeiro para o widget da web e, em seguida, continuará redirecionando para o aplicativo, se instalado.
dynamicLinkDomain NSString Define o domínio (ou subdomínio) do link dinâmico a ser usado para o link atual se ele for aberto usando o Firebase Dynamic Links. Como vários domínios de link dinâmico podem ser configurados por projeto, este campo oferece a capacidade de escolher explicitamente um. Se nenhum for fornecido, o primeiro domínio será usado por padrão.

O exemplo a seguir ilustra como enviar um link de verificação por e-mail que será aberto primeiro em um aplicativo móvel como um Firebase Dynamic Link usando o domínio de link dinâmico personalizado example.page.link (aplicativo iOS com.example.ios ou aplicativo Android com.example.android onde o aplicativo será instalado, se ainda não estiver instalado e a versão mínima for 12 ). O link direto conterá a carga útil do URL de continuação https://www.example.com/?email=user@example.com .

Rápido


var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android",
                                         installIfNotAvailable:true,
                                         minumumVersion:"12")
// When multiple custom dynamic link domains are defined, specify which one to use.
actionCodeSettings.dynamicLinkDomain = "example.page.link"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Objetivo-C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
 // When multiple custom dynamic link domains are defined, specify which one to use.
 actionCodeSettings.dynamicLinkDomain = @"example.page.link";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"
                     installIfNotAvailable:YES
                            minimumVersion:'12'];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

O Firebase Auth usa Firebase Dynamic Links ao enviar um link que deve ser aberto em um aplicativo móvel. Para usar esse recurso, os Dynamic Links precisam ser configurados no Firebase Console.

  1. Ative links dinâmicos do Firebase:

    1. No console do Firebase , abra a seção Dynamic Links .
    2. Se você ainda não aceitou os termos do Dynamic Links e criou um domínio do Dynamic Links, faça-o agora.

      Se você já criou um domínio Dynamic Links, anote-o. Um domínio Dynamic Links normalmente se parece com o exemplo a seguir:

      example.page.link

      Você precisará desse valor ao configurar seu aplicativo Apple ou Android para interceptar o link de entrada.

  2. Configurando aplicativos Android:

    1. Se você planeja lidar com esses links no seu aplicativo Android, o nome do pacote Android precisa ser especificado nas configurações do projeto do Firebase Console. Além disso, o SHA-1 e o SHA-256 do certificado de aplicação precisam ser fornecidos.
    2. Você também precisará configurar o filtro de intent para o link direto em seu arquivo AndroidManifest.xml.
    3. Para obter mais informações, consulte instruções sobre como receber links dinâmicos do Android .
  3. Configurando aplicativos Apple:

    1. Se você planeja lidar com esses links no seu aplicativo, o ID do pacote precisa ser especificado nas configurações do projeto do Firebase Console. Além disso, o ID da App Store e o ID da equipe de desenvolvedores da Apple também precisam ser especificados.
    2. Você também precisará configurar o domínio de link universal FDL como um domínio associado nos recursos do seu aplicativo.
    3. Se você planeja distribuir seu aplicativo para versões iOS 8 e anteriores, precisará definir o ID do pacote como um esquema personalizado para URLs recebidos.
    4. Para obter mais informações, consulte Recebendo instruções de links dinâmicos de plataformas Apple .

Manipulando ações de e-mail em um aplicativo da web

Você pode especificar se deseja manipular primeiro o link do código de ação de um aplicativo Web e, em seguida, redirecionar para outra página da Web ou aplicativo móvel após a conclusão bem-sucedida, desde que o aplicativo móvel esteja disponível. Isso é feito definindo handleCodeInApp como false no objeto FIRActionCodeSettings (Obj-C) ou ActionCodeSettings (Swift). Embora um ID de pacote ou nome de pacote Android não seja obrigatório, fornecê-los permitirá que o usuário redirecione de volta para o aplicativo especificado após a conclusão do código de ação por e-mail.

O URL da web usado aqui é aquele configurado na seção de modelos de ação de e-mail. Um padrão é provisionado para todos os projetos. Consulte customização de gerenciadores de email para saber mais sobre como personalizar o gerenciador de ações de email.

Nesse caso, o link dentro do parâmetro de consulta continueURL será um link FDL cuja carga útil é a URL especificada no objeto ActionCodeSettings . Embora você possa interceptar e manipular o link de entrada do seu aplicativo sem qualquer dependência adicional, recomendamos usar a biblioteca cliente FDL para analisar o link direto para você.

Ao lidar com ações de e-mail, como verificação de e-mail, o código de ação do parâmetro de consulta oobCode precisa ser analisado no link direto e aplicado por meio de applyActionCode para que a alteração entre em vigor, ou seja, o e-mail seja verificado.

Lidando com ações de email em um aplicativo móvel

Você pode especificar se deseja manipular primeiro o link do código de ação em seu aplicativo móvel, desde que ele esteja instalado. Com aplicativos Android, você também pode especificar por meio do androidInstallIfNotAvailable que o aplicativo deve ser instalado se o dispositivo for compatível e ainda não estiver instalado. Se o link for clicado em um dispositivo que não suporta o aplicativo móvel, ele será aberto em uma página da web. Isso é feito definindo handleCodeInApp como true no objeto FIRActionCodeSettings (Obj-C) ou ActionCodeSettings (Swift). O nome do pacote Android ou ID do pacote do aplicativo móvel também precisará ser especificado. O URL da web substituto usado aqui, quando nenhum aplicativo móvel estiver disponível, é aquele configurado na seção de modelos de ação de e-mail. Um padrão é provisionado para todos os projetos. Consulte customização de gerenciadores de email para saber mais sobre como personalizar o gerenciador de ações de email.

Neste caso, o link do aplicativo móvel enviado ao usuário será um link FDL cujo payload é a URL do código de ação, configurado no Console, com os parâmetros de consulta oobCode , mode , apiKey e continueUrl . Este último será o URL original especificado no objeto FIRActionCodeSettings (Obj-C) ou ActionCodeSettings (Swift). Embora você possa interceptar e manipular o link de entrada do seu aplicativo sem qualquer dependência adicional, recomendamos usar a biblioteca cliente FDL para analisar o link direto para você. O código de ação pode ser aplicado diretamente de um aplicativo móvel, semelhante à forma como é tratado no fluxo da web descrito na seção de personalização de manipuladores de email .

Ao lidar com ações de e-mail, como verificação de e-mail, o código de ação do parâmetro de consulta oobCode precisa ser analisado no link direto e aplicado por meio de applyActionCode para que a alteração entre em vigor, ou seja, o e-mail seja verificado.