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

Adicione facilmente o login ao seu aplicativo Android 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, login do Twitter e login do GitHub.
  • 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 conta - fluxos para vincular contas de usuário com segurança entre provedores de identidade.
  • Atualização de usuários anônimos - fluxos para atualizar usuários anônimos com segurança.
  • Temas personalizados - 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.
  • Smart Lock for Passwords - integração automática com Smart Lock for Passwords para login rápido em vários dispositivos.

Antes de você começar

  1. Se ainda não o fez, adicione o Firebase ao seu projeto Android .

  2. Adicione as dependências do FirebaseUI ao arquivo build.gradle no nível do aplicativo. Se você quiser dar suporte ao login com o Facebook ou Twitter, inclua também os SDKs do Facebook e do Twitter:

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:7.2.0'
    
        // Required only if Facebook login support is required
        // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
        implementation 'com.facebook.android:facebook-android-sdk:8.x'
    }
    

    O SDK de autenticação do FirebaseUI tem dependências transitivas no SDK do Firebase e no SDK do Google Play Services.

  3. No console do Firebase , abra a seção Autenticação e ative os métodos de login aos quais você quer oferecer suporte. Alguns métodos de login exigem informações adicionais, geralmente disponíveis no console do desenvolvedor do serviço.

  4. Se você oferece suporte ao Login do Google e ainda não especificou a impressão digital SHA-1 do seu aplicativo, faça isso na página Configurações do console do Firebase. Consulte Autenticação do seu cliente para obter detalhes sobre como obter a impressão digital SHA-1 do seu aplicativo.

  5. Se você dá suporte ao login com Facebook ou Twitter, adicione recursos de string a strings.xml que especificam as informações de identificação exigidas por cada provedor:

    
    <resources>
      <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). -->
      <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string>
      <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string>
    </resources>
    

Entrar

Crie um ActivityResultLauncher que registre um retorno de chamada para o contrato de resultado da atividade do FirebaseUI:

Java

// See: https://developer.android.com/training/basics/intents/result
private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult(
        new FirebaseAuthUIActivityResultContract(),
        new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() {
            @Override
            public void onActivityResult(FirebaseAuthUIAuthenticationResult result) {
                onSignInResult(result);
            }
        }
);

Kotlin+KTX

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
        FirebaseAuthUIActivityResultContract()
) { res ->
    this.onSignInResult(res)
}

Para iniciar o fluxo de login do FirebaseUI, crie um intent de login com seus métodos de login preferidos:

Java

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.PhoneBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build(),
        new AuthUI.IdpConfig.FacebookBuilder().build(),
        new AuthUI.IdpConfig.TwitterBuilder().build());

// Create and launch sign-in intent
Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .build();
signInLauncher.launch(signInIntent);

Kotlin+KTX

// Choose authentication providers
val providers = arrayListOf(
        AuthUI.IdpConfig.EmailBuilder().build(),
        AuthUI.IdpConfig.PhoneBuilder().build(),
        AuthUI.IdpConfig.GoogleBuilder().build(),
        AuthUI.IdpConfig.FacebookBuilder().build(),
        AuthUI.IdpConfig.TwitterBuilder().build())

// Create and launch sign-in intent
val signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .build()
signInLauncher.launch(signInIntent)

Quando o fluxo de login for concluído, você receberá o resultado em onSignInResult :

Java

private void onSignInResult(FirebaseAuthUIAuthenticationResult result) {
    IdpResponse response = result.getIdpResponse();
    if (result.getResultCode() == RESULT_OK) {
        // Successfully signed in
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        // ...
    } else {
        // Sign in failed. If response is null the user canceled the
        // sign-in flow using the back button. Otherwise check
        // response.getError().getErrorCode() and handle the error.
        // ...
    }
}

Kotlin+KTX

private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
    val response = result.idpResponse
    if (result.resultCode == RESULT_OK) {
        // Successfully signed in
        val user = FirebaseAuth.getInstance().currentUser
        // ...
    } else {
        // Sign in failed. If response is null the user canceled the
        // sign-in flow using the back button. Otherwise check
        // response.getError().getErrorCode() and handle the error.
        // ...
    }
}

Configurar métodos de login

  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ê também terá que habilitar o Firebase Dynamic Links para usar o login por link de e-mail. No console do Firebase , clique em Dynamic Links em Engage na barra de navegação. Clique em Introdução e adicione um domínio. O domínio que você escolher aqui será refletido nos links de e-mail enviados aos seus usuários.

  4. Você pode ativar o login por link de e-mail no FirebaseUI chamando enableEmailLinkSignIn em uma instância do EmailBuilder . Você também precisará fornecer um objeto ActionCodeSettings válido com setHandleCodeInApp definido como true. Além disso, você precisa colocar na lista de permissões o URL que você passa para setUrl , o que pode ser feito no console do Firebase , em Authentication -> Sign in Methods -> Authorized domains.

    Java

    ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
            .setAndroidPackageName(
                    /* yourPackageName= */ "...",
                    /* installIfNotAvailable= */ true,
                    /* minimumVersion= */ null)
            .setHandleCodeInApp(true) // This must be set to true
            .setUrl("https://google.com") // This URL needs to be whitelisted
            .build();
    
    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.EmailBuilder()
                    .enableEmailLinkSignIn()
                    .setActionCodeSettings(actionCodeSettings)
                    .build()
    );
    Intent signInIntent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .build();
    signInLauncher.launch(signInIntent);

    Kotlin+KTX

    val actionCodeSettings = ActionCodeSettings.newBuilder()
            .setAndroidPackageName( /* yourPackageName= */
                    "...",  /* installIfNotAvailable= */
                    true,  /* minimumVersion= */
                    null)
            .setHandleCodeInApp(true) // This must be set to true
            .setUrl("https://google.com") // This URL needs to be whitelisted
            .build()
    
    val providers = listOf(
            EmailBuilder()
                    .enableEmailLinkSignIn()
                    .setActionCodeSettings(actionCodeSettings)
                    .build()
    )
    val signInIntent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .build()
    signInLauncher.launch(signInIntent)
  5. Se você quiser pegar o link em uma atividade específica, siga as etapas descritas aqui . Caso contrário, o link redirecionará para sua atividade do iniciador.

  6. Depois de pegar o link direto, você precisará ligar para verificar se podemos lidar com isso para você. Se pudermos, você precisa passar para nós via setEmailLink .

    Java

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
            return;
        }
        String link = getIntent().getExtras().getString("email_link_sign_in");
        if (link != null) {
            Intent signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build();
            signInLauncher.launch(signInIntent);
        }
    }

    Kotlin+KTX

    if (AuthUI.canHandleIntent(intent)) {
        val extras = intent.extras ?: return
        val link = extras.getString("email_link_sign_in")
        if (link != null) {
            val signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build()
            signInLauncher.launch(signInIntent)
        }
    }
  7. O acesso opcional por link de e-mail entre dispositivos é suportado, o que significa que o link enviado pelo seu aplicativo Android pode ser usado para fazer login em seus aplicativos da Web ou da Apple. Por padrão, o suporte a vários dispositivos está ativado. Você pode desativá-lo chamando setForceSameDevice na instância EmailBuilder .

    Consulte FirebaseUI-Web e FirebaseUI-iOS para mais informações.

Sair

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

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

Você também pode excluir completamente a conta do usuário:

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

Costumização

Por padrão, o FirebaseUI usa AppCompat para temas, o que significa que ele adotará naturalmente o esquema de cores do seu aplicativo. Se você precisar de mais personalização, poderá passar um tema e um logotipo para o criador de Intent de login:

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setLogo(R.drawable.my_great_logo)      // Set logo drawable
        .setTheme(R.style.MySuperAppTheme)      // Set theme
        .build();
signInLauncher.launch(signInIntent);

Kotlin+KTX

val signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setLogo(R.drawable.my_great_logo) // Set logo drawable
        .setTheme(R.style.MySuperAppTheme) // Set theme
        .build()
signInLauncher.launch(signInIntent)

Você também pode definir uma política de privacidade e termos de serviço personalizados:

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .build();
signInLauncher.launch(signInIntent);

Kotlin+KTX

val signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .build()
signInLauncher.launch(signInIntent)

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 .