Você pode passar o estado por meio de um URL contínuo ao enviar ações de e-mail para redefinição de senha ou verificar o e-mail de um usuário. Isso possibilita ao usuário retornar ao app após a conclusão da ação. Além disso, você pode especificar se o link de ação do e-mail deverá ser processado diretamente de um aplicativo para dispositivos móveis quando ele for instalado, em vez de uma página da Web.
Isso pode ser extremamente útil nas seguintes situações comuns:
Um usuário que não está conectado no momento pode estar tentando acessar conteúdo que exija que o usuário faça login. No entanto, o usuário pode ter esquecido a senha e, por conta disso, acionou o fluxo de redefinição de senha. No final do fluxo, o usuário espera voltar para a seção do app que estava tentando acessar.
Um aplicativo só pode oferecer acesso a contas verificadas. Por exemplo, um app de newsletter pode exigir que o usuário verifique o próprio e-mail antes de se inscrever. O usuário passa pelo fluxo de verificação de e-mail e espera retornar ao app para concluir a inscrição.
Em geral, quando um usuário inicia uma redefinição de senha ou um fluxo de verificação de e-mail em um app iOS, ele espera completar o fluxo dentro do app. A capacidade de passar o estado por meio de um URL contínuo torna isso possível.
A possibilidade de passar de estado por meio de um URL contínuo é um recurso poderoso que o Firebase Authentication oferece e que pode melhorar significativamente a experiência do usuário.
Como transmitir o estado/URL de confirmação nas ações de e-mail
Para transmitir um URL de confirmação com segurança, o domínio do URL precisa estar na lista de permissões do console do Firebase. Na seção Autenticação, verifique se esse domínio está na lista de Domínios autorizados da guia Método de login. Se não estiver, adicione-o.
Uma instância FIRActionCodeSettings
precisa ser fornecida ao enviar um e-mail de redefinição de senha ou de verificação. Essa interface tem os seguintes parâmetros:
Swift
Parâmetro | Tipo | Descrição |
---|---|---|
URL |
String | Define o link (estado/URL de confirmação) que tem diferentes significados em contextos distintos:
|
iOSBundleID |
String | Define o ID do pacote. Isso vai tentar abrir o link em um aplicativo da Apple se ele estiver instalado. O aplicativo precisa estar registrado no console. Se não for fornecido um código do pacote, o valor deste campo será definido como o código do pacote principal do app. |
androidPackageName |
String | Define o nome do pacote Android. Isso tentará abrir o link em um app Android se ele estiver instalado. |
androidInstallIfNotAvailable |
Booleano | Especifica se o app para Android precisa ser instalado, caso isso ainda não tenha ocorrido e ele seja compatível com o dispositivo. Se este campo for mostrado sem um packageName, um erro será lançado, explicando que o packageName precisa ser fornecido em conjunto com o campo. |
androidMinimumVersion |
String | A versão mínima do app permitida neste fluxo. Se o atributo minimumVersion for especificado e uma versão mais antiga do app estiver instalada, o usuário será levado à Play Store para atualizar o app. O app para Android precisa estar registrado no console. |
handleCodeInApp |
Booleano | Se o link de ação de e-mail deverá ser aberto em um aplicativo para dispositivos móveis ou em um link da Web primeiro. O valor padrão é falso. Quando definido como verdadeiro, o link do código de ação será enviado como um link universal ou um link do app Android e será aberto pelo app, se estiver instalado. Caso seja falso, o código será enviado primeiro ao widget da Web e, em seguida, redirecionará para o app, se estiver instalado. |
dynamicLinkDomain |
String | Define o domínio de link dinâmico (ou subdomínio) a ser usado para o link atual, se ele for aberto usando o Firebase Dynamic Links. Como é possível configurar vários domínios de links dinâmicos por projeto, esse campo oferece a capacidade de escolher explicitamente um. Se nenhum for fornecido, o primeiro domínio é usado por padrão. |
Objective-C
Parâmetro | Tipo | Descrição |
---|---|---|
URL |
NSString | Define o link (estado/URL de confirmação) que tem diferentes significados em contextos distintos:
|
iOSBundleID |
NSString | Define o ID do pacote. Isso vai tentar abrir o link em um aplicativo da Apple se ele estiver instalado. O aplicativo precisa estar registrado no console. |
androidPackageName |
NSString | Define o nome do pacote Android. Isso tentará abrir o link em um app Android se ele estiver instalado. |
androidInstallIfNotAvailable |
BOOL | Especifica se o app para Android precisa ser instalado, caso isso ainda não tenha ocorrido e ele seja compatível com o dispositivo. Se este campo for mostrado sem um packageName, um erro será lançado, explicando que o packageName precisa ser fornecido em conjunto com o campo. |
androidMinimumVersion |
NSString | A versão mínima do app permitida neste fluxo. Se o atributo minimumVersion for especificado e uma versão mais antiga do app estiver instalada, o usuário será levado à Play Store para atualizar o app. O app para Android precisa estar registrado no console. |
handleCodeInApp |
BOOL | Se o link de ação de e-mail deverá ser aberto em um aplicativo para dispositivos móveis ou em um link da Web primeiro. O valor padrão é falso. Quando definido como verdadeiro, o link do código de ação será enviado como um link universal ou um link do app Android e será aberto pelo app, se estiver instalado. Caso seja falso, o código será enviado primeiro ao widget da Web e, em seguida, redirecionará para o app, se estiver instalado. |
dynamicLinkDomain |
NSString | Define o domínio de link dinâmico (ou subdomínio) a ser usado para o link atual, se ele for aberto usando o Firebase Dynamic Links. Como é possível configurar vários domínios de links dinâmicos por projeto, esse campo oferece a capacidade de escolher explicitamente um. Se nenhum for fornecido, o primeiro domínio é usado por padrão. |
O exemplo a seguir ilustra como enviar um link de verificação por e-mail que será aberto em um app para dispositivos móveis como Firebase Dynamic Links usando o domínio de link dinâmico personalizado example.page.link
(aplicativo para iOS com.example.ios
ou aplicativo para Android com.example.android
em que o aplicativo será instalado, se ainda não estiver instalado e a versão mínima for 12
). O link direto conterá o payload do URL de continuação https://www.example.com/?email=user@example.com
.
Swift
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, minimumVersion:"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. })
Objective-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. }];
Como configurar o Firebase Dynamic Links
O Firebase Auth usa o Firebase Dynamic Links ao enviar um link que deve ser aberto em um aplicativo para dispositivos móveis. Para usar esse recurso, o Dynamic Links precisa ser configurado no Console do Firebase.
Ative o Firebase Dynamic Links:
- No console do Firebase, abra a seção Dynamic Links.
-
Se você ainda não aceitou os termos do Dynamic Links e criou um domínio Dynamic Links, faça isso agora.
Se você já criou um domínio Dynamic Links, anote-o. Um domínio Dynamic Links geralmente se parece com este exemplo:
example.page.link
Você vai precisar desse valor ao configurar o app Android ou Apple para interceptar o link recebido.
Como configurar apps Android:
- Se você planeja processar esses links a partir do aplicativo para Android, o nome do pacote para Android precisa ser especificado nas configurações do projeto do Firebase console. Além disso, o SHA-1 e o SHA-256 do certificado do aplicativo precisam ser fornecidos.
- Você também precisará configurar o filtro de intent para o link direto no seu arquivo AndroidManifest.xml.
- Para mais informações, consulte as instruções para receber links dinâmicos no Android.
Como configurar aplicativos da Apple:
- Se você planeja processar esses links no seu aplicativo, o ID do pacote precisa ser especificado nas configurações do projeto no Console do Firebase. Além disso, os IDs da App Store e da equipe de desenvolvedores da Apple também precisam ser especificados.
- Você também precisará configurar o domínio do link universal FDL como um domínio associado nos recursos do seu aplicativo.
- Se você pretende distribuir seu aplicativo para a versão 8 e anteriores do iOS, será necessário configurar seu ID do pacote como um esquema personalizado para URLs recebidos.
- Para mais informações, consulte Como receber as instruções do Dynamic Links na plataforma da Apple.
Processamento de ações de e-mail em um app da Web
Você pode especificar se quer processar o link de código de ação de um aplicativo da Web primeiro e, em seguida, redirecionar para outra página da Web ou aplicativo para dispositivos móveis após a conclusão bem-sucedida, desde que o aplicativo para dispositivos móveis esteja disponível.
Para isso, defina handleCodeInApp
como false
no
objeto FIRActionCodeSettings
(Obj-C) ou ActionCodeSettings
(Swift). Ainda que
um ID de pacote
ou nome de pacote Android não seja necessário, fornecê-los permitirá ao usuário
ser redirecionado para o app especificado na conclusão do código de ação de e-mail.
O URL da Web usado aqui é aquele configurado na seção de modelos de ações de e-mail. Um padrão é provisionado para todos os projetos. Consulte Como personalizar gerenciadores de e-mail para saber mais sobre como personalizar o gerenciador de ações de e-mail.
Neste caso, o link dentro do parâmetro de consulta continueURL
será um link FDL com payload URL
especificado no objeto ActionCodeSettings
. Embora você possa interceptar e manipular o link recebido do seu app sem nenhuma dependência adicional, recomendamos o uso da biblioteca de cliente FDL para analisar o link direto para você.
Ao processar ações de e-mail como a verificação, o código de ação do parâmetro de consulta oobCode
precisa ser analisado no link direto e aplicado via applyActionCode
para que a alteração seja concluída, ou seja, para que o e-mail seja verificado.
Processamento de ações de e-mail em um app para dispositivos móveis
É possível especificar se você quer processar o link do código de ação no seu
aplicativo para dispositivos móveis primeiro, desde que esteja instalado. Com aplicativos para Android, você também pode especificar por meio do androidInstallIfNotAvailable
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 não compatível com o aplicativo para dispositivos móveis, ele será aberto de uma página da Web.
Para isso, defina handleCodeInApp
como true
no
objeto FIRActionCodeSettings
(Obj-C) ou ActionCodeSettings
(Swift). O
nome do pacote Android do aplicativo para dispositivos móveis ou o código do pacote também precisará ser
especificado. O URL da Web substituto usado aqui, quando nenhum aplicativo para dispositivos móveis estiver disponível, é
aquele configurado na seção de modelos de ação de e-mail. Um URL padrão é
fornecido para todos os projetos. Consulte
Como personalizar gerenciadores de e-mail para saber mais sobre
como personalizar o gerenciador de ações de e-mail.
Neste caso, o link do aplicativo para dispositivos móveis enviado ao usuário será um link FDL em que
o payload é a URL do código de ação, configurado no console, com os parâmetros
de consulta oobCode
mode
, apiKey
e continueUrl
. O último será o URL
original especificado no objeto FIRActionCodeSettings
(Obj-C) ou ActionCodeSettings
(Swift). Você pode interceptar e processar o link recebido do app sem nenhuma dependência adicional, mas recomendamos o uso da biblioteca de cliente FDL para analisar o link direto para você. É possível aplicar o código de ação diretamente a partir de um app para dispositivos móveis da mesma forma que ele é processado no
fluxo da Web descrito na
seção Como personalizar gerenciadores de e-mail.
Ao processar ações de e-mail como a verificação, o código de ação do parâmetro de consulta oobCode
precisa ser analisado no link direto e aplicado via applyActionCode
para que a alteração seja concluída, ou seja, para que o e-mail seja verificado.