O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Adicione facilmente o login ao seu aplicativo iOS com o FirebaseUI

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

FirebaseUI é uma biblioteca criada com base no SDK do Firebase Authentication que fornece fluxos de IU drop-in para uso em seu aplicativo. O FirebaseUI oferece os seguintes benefícios:

  • Vários provedores : fluxos de login para e-mail/senha, link de e-mail, autenticação por telefone, login do Google, login do Facebook e login do Twitter.
  • Gerenciamento de contas : fluxos para lidar com tarefas de gerenciamento de contas, como criação de contas e redefinições de senha.
  • Vinculação de contas anônimas : fluxos para vincular automaticamente contas anônimas a provedores de identidade.
  • Personalizável : personalize a aparência do FirebaseUI para corresponder ao seu aplicativo. Além disso, como o FirebaseUI é de código aberto, você pode bifurcar o projeto e personalizá-lo exatamente de acordo com suas necessidades.

Antes de você começar

  1. Adicione o Firebase ao seu projeto da Apple .

  2. Adicione o FirebaseUI ao seu Podfile:

    pod 'FirebaseUI'
    

    Se preferir, você pode adicionar apenas o componente Auth e os provedores que deseja usar:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. Se você ainda não conectou seu aplicativo ao projeto do Firebase, faça isso no Firebase console .

Configurar métodos de login

Antes de usar o Firebase para fazer login de usuários, você deve ativar e configurar os métodos de login aos quais deseja oferecer suporte.

Endereço de e-mail e senha

No console do Firebase , abra a seção Autenticação e ative a autenticação de e-mail e senha.

  1. No console do Firebase , abra a seção Autenticação . Na guia Método de login , habilite o provedor de e- mail/senha . Observe que o login por e-mail/senha deve estar habilitado para usar o login por link de e-mail.

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

  3. Você pode habilitar o login por link de e-mail inicializando uma instância FUIEmailAuth com FIREmailLinkAuthSignInMethod . Você também precisará fornecer um objeto FIRActionCodeSettings válido com handleCodeInApp definido como true.

Rápido

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(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

Objetivo-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] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. Além disso, você precisa colocar na lista de permissões o URL que você passa para o inicializador. Você pode fazer isso no console do Firebase , abra a seção Autenticação . Na guia Método de login , adicione a URL em Domínios autorizados .

  2. Depois de capturar o link direto, você precisará passá-lo para a interface do usuário de autenticação para que ele possa ser tratado.

Rápido

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

Objetivo-C

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

Maçã

  1. Siga as seções Antes de começar e Cumprir com os requisitos de dados anônimos da Apple no guia Firebase Sign in with Apple .

  2. Adicione o recurso Entrar com a Apple ao seu arquivo de direitos.

  3. Inicialize uma instância do provedor OAuth configurada para Entrar com a Apple:

    Rápido

    provider = FUIOAuth.appleAuthProvider()
    

    Objetivo-C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

Google

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

  2. Adicione seu ID de cliente invertido como um esquema de URL em seu projeto Xcode. Você pode encontrar esse valor no arquivo GoogleService-Info.plist .

Facebook

  1. Configure o SDK de login do Facebook seguindo a página de introdução do Facebook .

  2. No console do Firebase , abra a seção Autenticação e ative o Facebook. Para habilitar o login no Facebook, você deve fornecer seu ID do aplicativo do Facebook e o segredo do aplicativo, que você pode obter no console de desenvolvedores do Facebook.

  3. Habilite o compartilhamento de chaveiro em seu projeto Xcode na tela Configurações do projeto > Recursos .

  4. Adicione fb FACEBOOK_APP_ID como um esquema de URL em seu projeto Xcode.

  5. Adicione seu ID de aplicativo do Facebook e nome de exibição ao arquivo Info.plist :

    Chave Valor
    ID do aplicativo do Facebook FACEBOOK_APP_ID (por exemplo, 1234567890 )
    Nome de exibição do Facebook O nome do seu aplicativo
  6. Inicialize uma instância de provedor do Facebook:

    Rápido

    provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
    

    Objetivo-C

    FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
    

  7. Se você quiser usar o Login Limitado do Facebook , defina a propriedade useLimitedLogin na instância FUIFacebookAuth .

    Rápido

    provider.useLimitedLogin = true
    

    Objetivo-C

    provider.useLimitedLogin = YES;
    

Twitter

  1. No console do Firebase , abra a seção Autenticação e ative o Twitter. Para ativar o login no Twitter, você deve fornecer a chave e o segredo do consumidor da API do Twitter, que podem ser obtidos no console do Twitter Application Management.

  2. Inicialize uma instância do provedor OAuth configurada para login no Twitter:

    Rápido

    provider = FUIOAuth.twitterAuthProvider()
    

    Objetivo-C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

Número de telefone

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

  2. O Firebase precisa verificar se as solicitações de login por número de telefone são provenientes do seu aplicativo. Uma das maneiras de fazer isso é por meio de notificações de APNs. Consulte Ativar verificação de aplicativo para obter detalhes.

    Para ativar as notificações de APNs para uso com o Firebase Authentication:

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

    2. Faça upload da sua chave de autenticação de APNs para o Firebase. Se você ainda não tiver uma chave de autenticação de APNs, certifique-se de criar uma no Apple Developer Member Center .

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

      2. Na chave de autenticação de APNs na configuração do aplicativo iOS , clique no botão Upload .

      3. Navegue até o local onde você salvou sua chave, selecione-a e clique em Abrir . Adicione o ID da chave para a chave (disponível no Apple Developer Member Center ) e clique em Carregar .

      Se você já tiver um certificado de APNs, poderá fazer upload do certificado.

  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.

    Para habilitar a verificação do reCAPTCHA, se você ainda não adicionou seu ID de cliente reverso como um esquema de URL (por exemplo, para habilitar o Login do Google), faça isso em seu projeto Xcode. Você pode encontrar esse valor no arquivo GoogleService-Info.plist .

  4. Opcional : o Firebase usa o método swizzling para obter automaticamente o token de APNs do seu aplicativo, para lidar com as notificações push silenciosas que o Firebase envia ao seu aplicativo e para interceptar automaticamente o redirecionamento do esquema personalizado da página de verificação do reCAPTCHA durante a verificação.

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

Entrar

Para iniciar o fluxo de login do FirebaseUI, primeiro inicialize o FirebaseUI:

Rápido

import FirebaseAuthUI

/* ... */

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

Objetivo-C

@import FirebaseAuthUI;

...

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

Em seguida, configure o FirebaseUI para usar os métodos de login que você quer oferecer:

Rápido

import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI

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

Objetivo-C

@import FirebaseAuthUI;
@import FirebaseFacebookAuthUI;
@import FirebaseGoogleAuthUI;
@import FirebaseOAuthUI;
@import FirebasePhoneAuthUI;

...

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 do Google ou do Facebook, implemente um manipulador para o resultado dos fluxos de inscrição do Google e do Facebook:

Rápido

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
}

Objetivo-C

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

Por fim, obtenha uma instância de AuthViewController de FUIAuth . Você pode apresentá-lo como o primeiro controlador de exibição do seu aplicativo ou apresentá-lo de outro controlador de exibição em seu aplicativo.

Rápido

Para obter o seletor de método de login:

let authViewController = authUI.authViewController()

Se você usar apenas o login por número de telefone, poderá exibir diretamente a visualização de login por número de telefone:

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

Objetivo-C

Para obter o seletor de método de login:

UINavigationController *authViewController = [authUI authViewController];

Se você usar apenas o login por número de telefone, poderá exibir diretamente a visualização de login por número de telefone:

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

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

Rápido

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

Objetivo-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

O FirebaseUI fornece métodos convenientes para sair do Firebase Authentication, bem como de todos os provedores de identidade social:

Rápido

authUI.signOut()

Objetivo-C

[authUI signOut];

Costumização

Você pode personalizar as telas de login subclassificando os controladores de visualização do FirebaseUI e especificando-os nos métodos delegados do FUIAuth :

Rápido

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)
}

Objetivo-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 para os termos de serviço do seu aplicativo, que estão vinculados na tela de criação da conta:

Rápido

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

Objetivo-C

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

Por fim, você pode personalizar as mensagens e os prompts exibidos aos usuários especificando um pacote personalizado:

Rápido

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

Objetivo-C

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

Próximos passos

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