Firebase es una plataforma de desarrollo de aplicaciones móviles y web. Proporciona servicios que una aplicación web o una aplicación móvil pueden requerir. Firebase proporciona autenticación de correo electrónico y contraseña sin la sobrecarga de construir el backend para la autenticación de usuarios. Google Sign-In es una forma segura de autenticar a los usuarios en sus aplicaciones. Reduce la molestia de lidiar y manejar esas contraseñas adicionales por parte del usuario para autenticarse en la aplicación. Firebase ofrece una gran cantidad de opciones para implementar el inicio de sesión en su aplicación, como correo electrónico, número de teléfono, Google, Facebook, etc.
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: conecta tu aplicación a Firebase
Después de crear un nuevo proyecto en Android Studio. Conecta tu aplicación a Firebase. Para conectar su aplicación a firebase. Navegue a Herramientas en la barra superior. Después de eso, haga clic en Firebase. Se abrirá una nueva ventana en el lado derecho. Dentro de esa ventana, haga clic en Autenticación y luego en Autenticación de correo electrónico y contraseña.
Después de hacer clic en la autenticación de correo electrónico y contraseña, verá la siguiente pantalla. Dentro de esta pantalla, haga clic en la primera opción para conectarse a Firebase y luego haga clic en la segunda opción para agregar la autenticación de Firebase a su aplicación.
Agregue las siguientes dependencias si aún no están presentes allí.
implementación ‘com.google.firebase:firebase-auth:16.0.5’
implementación ‘com.google.android.gms:play-services-auth:18.1.0’
Paso 3: habilite el inicio de sesión de Google
Paso 4: trabajar con el archivo activity_main.xml
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/Signin" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:padding="20dp" android:text="Google Sign In" android:textColor="#000" android:textSize="22sp" /> </LinearLayout>
Paso 5: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInAccount import com.google.android.gms.auth.api.signin.GoogleSignInClient import com.google.android.gms.auth.api.signin.GoogleSignInOptions import com.google.android.gms.common.api.ApiException import com.google.android.gms.tasks.Task import com.google.firebase.FirebaseApp import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.GoogleAuthProvider import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { lateinit var mGoogleSignInClient: GoogleSignInClient val Req_Code: Int = 123 private lateinit var firebaseAuth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) FirebaseApp.initializeApp(this) val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() mGoogleSignInClient = GoogleSignIn.getClient(this, gso) firebaseAuth = FirebaseAuth.getInstance() Signin.setOnClickListener { view: View? -> Toast.makeText(this, "Logging In", Toast.LENGTH_SHORT).show() signInGoogle() } } private fun signInGoogle() { val signInIntent: Intent = mGoogleSignInClient.signInIntent startActivityForResult(signInIntent, Req_Code) } // onActivityResult() function : this is where // we provide the task and data for the Google Account override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == Req_Code) { val task: Task<GoogleSignInAccount> = GoogleSignIn.getSignedInAccountFromIntent(data) handleResult(task) } } private fun handleResult(completedTask: Task<GoogleSignInAccount>) { try { val account: GoogleSignInAccount? = completedTask.getResult(ApiException::class.java) if (account != null) { UpdateUI(account) } } catch (e: ApiException) { Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show() } } // this is where we update the UI after Google signin takes place private fun UpdateUI(account: GoogleSignInAccount) { val credential = GoogleAuthProvider.getCredential(account.idToken, null) firebaseAuth.signInWithCredential(credential).addOnCompleteListener { task -> if (task.isSuccessful) { SavedPreference.setEmail(this, account.email.toString()) SavedPreference.setUsername(this, account.displayName.toString()) val intent = Intent(this, DashboardActivity::class.java) startActivity(intent) finish() } } } override fun onStart() { super.onStart() if (GoogleSignIn.getLastSignedInAccount(this) != null) { startActivity( Intent( this, DashboardActivity ::class.java ) ) finish() } } }
Paso 6: Crear una nueva actividad vacía
Consulte y nombre la actividad como DashboardActivity.
Paso 7: trabajar con el archivo activity_dashboard.xml
Vaya al archivo activity_dashboard.xml y consulte el siguiente código. A continuación se muestra el código para el archivo activity_dashboard.xml . Cree un botón que, al hacer clic, cierre la sesión del usuario en la aplicación.
XML
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".DashboardActivity"> <Button android:id="@+id/logout" android:layout_width="300dp" android:layout_height="100dp" android:padding="10dp" android:text="Logout" android:textColor="#000" android:textSize="40sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Paso 8: trabajar con el archivo DashboardActivity.kt
Vaya al archivo DashboardActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo DashboardActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.google.android.gms.auth.api.signin.GoogleSignIn import com.google.android.gms.auth.api.signin.GoogleSignInClient import com.google.android.gms.auth.api.signin.GoogleSignInOptions import com.google.firebase.auth.FirebaseAuth import kotlinx.android.synthetic.main.activity_dashboard.* class DashboardActivity : AppCompatActivity() { // declare the GoogleSignInClient lateinit var mGoogleSignInClient: GoogleSignInClient private val auth by lazy { FirebaseAuth.getInstance() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_dashboard) // call requestIdToken as follows val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() mGoogleSignInClient = GoogleSignIn.getClient(this, gso) logout.setOnClickListener { mGoogleSignInClient.signOut().addOnCompleteListener { val intent = Intent(this, MainActivity::class.java) Toast.makeText(this, "Logging Out", Toast.LENGTH_SHORT).show() startActivity(intent) finish() } } } }
Producción: