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 voltar 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 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 voltar ao aplicativo para concluir a assinatura.

  • Em outros casos, o usuário pode ter iniciado o fluxo em seu dispositivo móvel e esperar, após a verificação, retornar ao aplicativo móvel em vez do navegador.

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 ActionCodeSettings precisa ser fornecida ao enviar um email de redefinição de senha ou um email de verificação. Ele pode ser criado com a classe ActionCodeSettings.Builder associada que contém os seguintes métodos:

Método Descrição
setUrl(String url)

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.
setIOSBundleId(String iOSBundleId) Define o ID do pacote iOS. Isso tentará abrir o link em um aplicativo iOS, se estiver instalado. O aplicativo iOS precisa ser registrado no Console.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Define o nome do pacote Android. Isso tentará abrir o link em um aplicativo Android, se estiver instalado. Se installIfNotAvailable estiver definido como true , ele especifica se o aplicativo Android deve ser instalado se o dispositivo for compatível e o aplicativo ainda não estiver instalado. 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.
setHandleCodeInApp(boolean status) 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.
setDynamicLinkDomain(String dynamicLinkDomain) 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 (aplicativo iOS com.example.ios ou aplicativo Android com.example.android ). O link direto conterá a carga útil do URL de continuação https://www.example.com/?email=user@example.com .

Kotlin+KTX

val auth = Firebase.auth
val user = auth.currentUser!!

val url = "http://www.example.com/verify?uid=" + user.uid
val actionCodeSettings = ActionCodeSettings.newBuilder()
    .setUrl(url)
    .setIOSBundleId("com.example.ios")
    // The default for this is populated with the current android package name.
    .setAndroidPackageName("com.example.android", false, null)
    .build()

user.sendEmailVerification(actionCodeSettings)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG, "Email sent.")
        }
    }

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

String url = "http://www.example.com/verify?uid=" + user.getUid();
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
        .setUrl(url)
        .setIOSBundleId("com.example.ios")
        // The default for this is populated with the current android package name.
        .setAndroidPackageName("com.example.android", false, null)
        .build();

user.sendEmailVerification(actionCodeSettings)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email 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 iOS:

    1. Se você planeja lidar com esses links no seu aplicativo iOS, o ID do pacote iOS 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 iOS como um esquema personalizado para URLs recebidos.
    4. Para obter mais informações, consulte instruções sobre como receber links dinâmicos do iOS .

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 chamando setHandleCodeInApp(false) no objeto ActionCodeSettings.Builder . Embora um ID de pacote iOS ou um nome de pacote Android não sejam necessários, 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 do 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 booleano installIfNotAvailable que o aplicativo 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 chamando setHandleCodeInApp(true) no objeto ActionCodeSettings.Builder . O nome do pacote Android do aplicativo móvel ou o ID do pacote iOS também precisarão ser especificados.

O URL da web substituto usado aqui, quando nenhum aplicativo móvel está 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 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ê. 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.