Ir para o console

Adicione facilmente o login ao seu app para iOS com a FirebaseUI

A FirebaseUI é uma biblioteca criada a partir do SDK do Firebase Authentication e fornece fluxos de IU com drop-in para serem usados no seu app. Esse recurso oferece os seguintes benefícios:

  • Vários provedores: fluxos de login para e-mail, senha, link de e-mail, autenticação por telefone e Login do Google, do Facebook e do Twitter.
  • Gerenciamento de contas: fluxos para processar tarefas de gerenciamento, como a criação de conta e redefinições de senha.
  • Vinculação de contas: fluxos para vincular as contas do usuário de maneira segura nos provedores de identidade.
  • Personalizável: personalize o visual da FirebaseUI para combinar com seu app. Além disso, como a FirebaseUI é um recurso de código aberto, você pode bifurcar o projeto e personalizá-lo de acordo com suas necessidades.

Antes de começar

  1. Adicione o Firebase ao projeto para iOS.

  2. Adicione a FirebaseUI ao Podfile:

    pod 'FirebaseUI'
    

    Se preferir, adicione apenas o componente do Auth e os provedores que você quiser usar:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/Twitter'
    pod 'FirebaseUI/Phone'
    
  3. Se você ainda não conectou o app ao projeto do Firebase, faça isso no Console do Firebase.

Configurar métodos de login

Antes de usar o Firebase para fazer o login de usuários, você precisa ativar e configurar os métodos de login que serão compatíveis.

Endereço de e-mail e senha

No Console do Firebase, abra a seção Authentication e ative a autenticação por e-mail e senha.

  1. No Console do Firebase, abra a seção Authentication. Na guia Método de login, ative o provedor de E-mail/senha. É necessário ativar esse método para poder usar o login por meio do link.

  2. Na mesma seção, ative o método Link do e-mail (login sem senha) e clique em Salvar.

  3. Para ativar o login por meio de link de e-mail, inicialize uma instância FUIEmailAuth com FIREmailLinkAuthSignInMethod. Também será preciso fornecer um objeto FIRActionCodeSettings válido com handleCodeInApp definido como "true".

Swift

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth.initAuthAuthUI(FUIAuth.defaultAuthUI(), signInMethod: FIREmailLinkAuthSignInMethod, forceSameDevice: false, allowNewEmailAccounts: true, actionCodeSetting: actionCodeSettings)

Objective-C

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initAuthAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. Além disso, é preciso incluir o URL transmitido para o inicializador na lista de permissões. Faça isso no Console do Firebase, na seção Autenticação. Na guia Método de login, adicione o URL em Domínios autorizados.

  2. Depois de capturar o link direto, transmita-o para a IU de autenticação para que ele possa ser processado.

Swift

Auth.defaultAuthUI.handleOpenURL(url, sourceApplication: sourceApplication)

Objective-C

[FUIAuth.defaultAuthUI handleOpenURL:url sourceApplication:sourceApplication];
  1. O login por link de e-mail na FirebaseUI-iOS é compatível com a FirebaseUI-Android e a FirebaseUI-web, em que um usuário que inicia o fluxo da FirebaseUI-Android pode abrir o link e fazer login com a FirebaseUI-web. O mesmo vale para o fluxo oposto.

Google

  1. No Console do Firebase, abra a seção Authentication e ative o Login do Google.

  2. Adicione seu código do cliente na ordem inversa como um esquema de URL no seu projeto do Xcode. Esse valor está no arquivo GoogleService-Info.plist.

Facebook

  1. No Console do Firebase, abra a seção Authentication e ative o Facebook. Para ativar o login com o Facebook, você precisa fornecer o código e a chave secreta do seu app do Facebook. Encontre essas informações no console do Facebook para desenvolvedores.

  2. Ative o compartilhamento do conjunto de chaves no projeto para Xcode na tela Configurações do projeto > Recursos.

  3. Adicione fbFACEBOOK_APP_ID como um esquema de URL no projeto para Xcode.

  4. Adicione o código do app do Facebook e o nome de exibição ao arquivo Info.plist:

    Chave Valor
    FacebookAppID FACEBOOK_APP_ID (por exemplo, 1234567890)
    FacebookDisplayName o nome do seu app

Twitter

  1. No Console do Firebase, abra a seção Authentication e ative o Twitter. Para ativar o login com o Twitter, você precisa informar a chave secreta e a chave de consumidor da API Twitter. Essas informações estão disponíveis no console de gerenciamento de aplicativos do Twitter.

  2. Adicione twitterkit-TWITTER_CONSUMER_KEY como um esquema de URL no projeto para Xcode.

  3. No representante do app, inicialize o kit do Twitter com a chave secreta e a chave de consumidor do Twitter:

    Swift

    func application(_ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
      Twitter.sharedInstance().start(withConsumerKey:"TWITTER_CONSUMER_KEY",
                                      consumerSecret:"TWITTER_CONSUMER_SECRET")
      return true
    }
    

    Objective-C

              - (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [[Twitter sharedInstance] startWithConsumerKey:@"TWITTER_CONSUMER_KEY"
                                        consumerSecret:@"TWITTER_CONSUMER_SECRET"];
    }
    

Número de telefone

  1. No Console do Firebase, abra a seção Authentication e ative o login por número de telefone.

  2. O Firebase precisa conseguir verificar se as solicitações de login com número de telefone vêm do seu app. Uma das maneiras de conseguir isso é por meio das notificações de APNs. Consulte Ativar verificação de apps para mais detalhes.

    Para ativar notificações de APNs para uso com o Firebase Authentication, faça o seguinte:

    1. No Xcode, ative as notificações push para seu projeto.

    2. Faça upload da chave de autenticação de APNs para o Firebase. Se você ainda não tem uma chave de autenticação de APNs, consulte Configurar APNs com o FCM.

      1. No seu projeto do Console do Firebase, selecione o ícone de engrenagem, Configurações do projeto e a guia Cloud Messaging.

      2. Acesse a Configuração do app para iOS. Em Chave de autenticação de APNs, clique no botão Upload.

      3. Navegue até o local onde você salvou a chave, selecione-a e clique em Abrir. Adicione o código da chave, disponível na seção Certificates, Identifiers & Profiles do Apple Developer Member Center (em inglês), e clique em Upload.

      Se você já tem um certificado de APNs, é possível fazer o upload dele em vez disso.

  3. Quando as notificações de APNs não podem ser recebidas em um dispositivo, o Firebase usa o reCAPTCHA para verificar as solicitações.

    Ative a verificação do reCAPTCHA no seu projeto para Xcode caso você ainda não tenha adicionado seu código do cliente na ordem inversa como um esquema de URL (por exemplo, para ativar o Login do Google). Esse valor está no arquivo GoogleService-Info.plist.

  4. Opcional: o Firebase usa o swizzling de métodos para conseguir o token dos APNs do seu app automaticamente, processar as notificações push silenciosas que o Firebase envia para seu app e interceptar automaticamente o redirecionamento do esquema personalizado da página de verificação do reCAPTCHA durante esse processo.

    Se você preferir não usar o swizzling, consulte Apêndice: como usar o login por telefone sem swizzling nos documentos de autenticação do SDK do Firebase.

Fazer login

Inicialize a FirebaseUI para dar início ao fluxo de login:

Swift

import FirebaseUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

Objective-C

@import FirebaseUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

Em seguida, configure a FirebaseUI para usar os métodos de login que serão compatíveis:

Swift

import FirebaseUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

Objective-C

@import FirebaseUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

Se você ativou o login com o Google ou Facebook, implemente um gerenciador para processar o resultado desses fluxos de login:

Swift

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Objective-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

Finalmente, consiga uma instância do atributo AuthViewController de FUIAuth. Assim, você pode apresentá-la como o primeiro controlador de visualização do seu app. Você também pode fazer isso por meio de outro controlador de visualização no aplicativo.

Swift

Para conseguir o seletor do método de login:

let authViewController = authUI.authViewController()

Se você usa apenas o login com número de telefone, exiba a visualização desse fluxo de login diretamente em vez disso:

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

Objective-C

Para conseguir o seletor do método de login:

UINavigationController *authViewController = [authUI authViewController];

Se você usa apenas o login com número de telefone, exiba a visualização desse fluxo de login diretamente em vez disso:

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

Depois que você apresenta a visualização da autenticação e o usuário faz o login, o resultado é retornado ao representante da autenticação da FirebaseUI no método didSignInWithUser:error::

Swift

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

Objective-C

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

Sair

A FirebaseUI oferece métodos de conveniência para sair do Firebase Authentication, bem como de todos os provedores de identidade de redes sociais:

Swift

authUI.signOut()

Objective-C

[authUI signOut];

Personalização

Você pode personalizar as telas de login ao subclassificar os controladores de visualização da FirebaseUI e especificá-los nos métodos delegados do FUIAuth:

Swift

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

Objective-C

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

Você pode personalizar o URL dos Termos de Serviço do seu app, que está vinculado na tela de criação de conta:

Swift

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

Objective-C

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

Por fim, você pode personalizar as mensagens e as solicitações exibidas aos usuários ao especificar um pacote personalizado:

Swift

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

Objective-C

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

Próximas etapas

  • Para mais informações sobre como usar e personalizar a FirebaseUI, consulte o arquivo README no GitHub.
  • Se você encontrar um problema na FirebaseUI e quiser reportá-lo, use o rastreador de problemas do GitHub.