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

FirebaseUI é uma biblioteca construída sobre o Firebase Authentication SDK que fornece fluxos de IU drop-in para uso em seu aplicativo. FirebaseUI oferece os seguintes benefícios:

  • Vários provedores - fluxos de login para e-mail/senha, link de e-mail, autenticação de 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 em provedores de identidade.
  • Atualização de usuário anônimo - fluxos para atualização segura de usuários anônimos.
  • Temas personalizados - personalize a aparência do FirebaseUI para combinar com seu aplicativo. Além disso, como o FirebaseUI é de código aberto, você pode criar um fork do projeto e personalizá-lo exatamente de acordo com suas necessidades.
  • Smart Lock for Passwords - integração automática com o Smart Lock for Passwords para acesso rápido entre 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ê deseja oferecer suporte ao login com o Facebook ou o 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 FirebaseUI Auth SDK tem dependências transitivas no Firebase SDK e no Google Play Services SDK.

  3. No console do Firebase , abra a seção Autenticação e habilite os métodos de login que deseja 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 Google Sign-in 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 Autenticando seu cliente para obter detalhes sobre como obter a impressão digital SHA-1 do seu aplicativo.

  5. Se você oferece suporte para 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 FirebaseUI:

Kotlin+KTX

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

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

Para iniciar o fluxo de login do FirebaseUI, crie uma intenção de login com seus métodos de login preferidos:

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)

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

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

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.
        // ...
    }
}

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.
        // ...
    }
}

Configurar métodos de login

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

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

  3. Você também terá que ativar o Firebase Dynamic Links para usar login com 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 de link de e-mail no FirebaseUI chamando o enableEmailLinkSignIn em uma instância 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 a URL passada para setUrl , o que pode ser feito no console do Firebase , em Authentication -> Sign in Methods -> Authorized domains.

    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)

    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);
  5. Se você deseja obter o link em uma atividade específica, siga as etapas descritas aqui . Caso contrário, o link redirecionará para a 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 .

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

    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);
        }
    }
  7. O login opcional de link de e-mail entre dispositivos é suportado, o que significa que o link enviado por meio de seu aplicativo Android pode ser usado para fazer login em seus aplicativos da Web ou da Apple. Por padrão, o suporte entre dispositivos está habilitado. Você pode desativá-lo chamando setForceSameDevice na instância EmailBuilder .

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

Sair

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

Kotlin+KTX

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

Java

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

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

Kotlin+KTX

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

Java

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

Costumização

Por padrão, o FirebaseUI usa AppCompat para temas, o que significa que 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 construtor Intent de login:

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)

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

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

Kotlin+KTX

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

Java

Intent 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 .