Escolha uma Página

Login com o Google no Firebase em aplicativo Android

Escrito por Alisson

agosto 22, 2023

Você precisa fazer com que o seu aplicativo se autentique no Firebase utilizando suas credenciais do Google?

É bem simples. Para isso precisamos que tenha um projeto android e o no Firebase criados. Com o projeto android aberto gere a chave SHA1 do seu cliente conforme a imagem abaixo.

Com a chave SHA1 gerada, agora podemos gerar o token OAuth2 de conexão. Para isso basta acessarmos o link abaixo e clicar no botão mostrado na imagem.

Token OAuth 2

Quando terminar de gerar a o Token copie ele e cole uma constante do seu projeto.

Agora que temos tudo configurado, podemos iniciar a configuração do nosso projeto.

Para autenticação no Firebase vamos precisar de duas dependências.

implementation 'com.google.firebase:firebase-auth:19.1.0'
implementation 'com.google.android.gms:play-services-auth:17.0.0'

Com as dependências adicionadas, vamos criar a nossa classe de configuração.

object FirebaseConfiguration {

    private var auth: FirebaseAuth? = null
    private var googleSignInOptions: GoogleSignInOptions? = null

    fun getFirebaseAuth(): FirebaseAuth {
        if (auth == null)
            auth = FirebaseAuth.getInstance()

        return auth!!
    }

    fun getFirebaseOption(): GoogleSignInOptions {
        if (googleSignInOptions == null)
            googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(GOOGLE_ID)
                .requestEmail()
                .build()

        return googleSignInOptions!!
    }
}

Agora podemos fazer com que a nossa aplicação se conect ao Firebase. No código abaixo está o código de um fragment que faz toda a conexão.

class LoginFragment : Fragment() {

    companion object{
        private const val GOOGLE_LOGIN = 159
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_login, container)

        view.findViewById<Button>(R.id.sign_in_button).setOnClickListener {
            val gso = FirebaseConfiguration.getFirebaseOption()
            val client = GoogleSignIn.getClient(context!!, gso)
            val signInIntent = client.signInIntent
            startActivityForResult(signInIntent, GOOGLE_LOGIN)
        }

        return view
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == GOOGLE_LOGIN) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            handleSignInResult(task)
        }
    }

    private fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
        try {
            val account = completedTask.getResult(ApiException::class.java)
            firebaseAuthWithGoogle(account!!)
        } catch (e: ApiException) {
            //fail
        }
    }

    private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
        val auth = FirebaseConfiguration.getFirebaseAuth()
        acct.email?.let { email ->
            auth.signInWithCredential(GoogleAuthProvider.getCredential(acct.idToken, null))
                .addOnCompleteListener {
                    if (it.isSuccessful) {
                        //success
                    } else {
                        //fail
                    }
                }
        }
    }
}

Você pode gostar…

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *