[{'from': 'human', 'value': '¿Cómo puedo conectar mi aplicación de Android programada con Kotlin y Jetpack Compose con la api de Firebase para autenticar un usuario con Google Auth?'}, {'from': 'gpt', 'value': 'Para conectar tu aplicación de Android desarrollada con Kotlin y Jetpack Compose a Firebase y autenticar usuarios con Google Auth, sigue estos pasos:\n\n#### 1. Configurar Firebase en tu proyecto de Android\n\n1. Ve al sitio web de [Firebase](https://firebase.google.com/). y crea una cuenta o inicia sesión.\n2. Crea un nuevo proyecto de Firebase y sigue las instrucciones.\n3. Agrega Firebase a tu proyecto de Android siguiendo las instrucciones en la [documentación oficial](https://firebase.google.com/docs/android/setup).\n4. Asegúrate de agregar el archivo `google-services.json` a tu proyecto.\n\n#### 2. Agregar las dependencias de Firebase y Google Auth\n\nAgrega las dependencias de Firebase y Google Auth en el archivo `build.gradle` de tu módulo `app`:\n\n```gradle\ndependencies {\n    // ...\n    implementation \'com.google.firebase:firebase-auth:21.0.1\'\n    implementation \'com.google.android.gms:play-services-auth:19.2.0\'\n}\n```\n\nNo olvides sincronizar tu proyecto con los archivos de Gradle.\n\n#### 3. Configurar Google Auth en Firebase\n\n1. Ve a la consola de Firebase, selecciona tu proyecto y ve a "Authentication" en el menú lateral.\n2. Ve a la pestaña "Método de inicio de sesión" y habilita "Google" como método de inicio de sesión.\n3. Sigue las instrucciones para configurar tu proyecto de Google Cloud y obtener la clave de cliente de OAuth 2.0.\n\n#### 4. Implementar la autenticación con Google Auth y Firebase en tu aplicación\n\nEn tu aplicación de Android, crea una clase para manejar la autenticación con Firebase y Google Auth. Puedes llamarla `AuthenticationManager`. Aquí tienes un ejemplo básico:\n\n```kotlin\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport androidx.activity.result.ActivityResultLauncher\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalContext\nimport com.google.android.gms.auth.api.signin.GoogleSignIn\nimport com.google.android.gms.auth.api.signin.GoogleSignInAccount\nimport com.google.android.gms.auth.api.signin.GoogleSignInClient\nimport com.google.android.gms.auth.api.signin.GoogleSignInOptions\nimport com.google.android.gms.common.api.ApiException\nimport com.google.firebase.auth.FirebaseAuth\nimport com.google.firebase.auth.GoogleAuthProvider\n\nclass AuthenticationManager(private val context: Context) {\n    private val firebaseAuth = FirebaseAuth.getInstance()\n    private val googleSignInClient: GoogleSignInClient\n\n    init {\n        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)\n            .requestIdToken(context.getString(R.string.default_web_client_id))\n            .requestEmail()\n            .build()\n\n        googleSignInClient = GoogleSignIn.getClient(context, gso)\n    }\n\n    val isUserSignedIn: Boolean\n        get() = firebaseAuth.currentUser != null\n\n    fun signInWithGoogle(activityLauncher: ActivityResultLauncher<Intent>) {\n        val signInIntent = googleSignInClient.signInIntent\n        activityLauncher.launch(signInIntent)\n    }\n\n    fun handleSignInResult(data: Intent?, onSuccess: () -> Unit, onFailure: (String) -> Unit) {\n        try {\n            val task = GoogleSignIn.getSignedInAccountFromIntent(data)\n            val account = task.getResult(ApiException::class.java)\n\n            account?.let {\n                firebaseAuthWithGoogle(it, onSuccess, onFailure)\n            } ?: onFailure("Error al iniciar sesión con Google")\n        } catch (e: ApiException) {\n            onFailure("Error al iniciar sesión con Google: ${e.message}")\n        }\n    }\n\n    private fun firebaseAuthWithGoogle(account: GoogleSignInAccount, onSuccess: () -> Unit, onFailure: (String) -> Unit) {\n        val credential = GoogleAuthProvider.getCredential(account.idToken, null)\n        firebaseAuth.signInWithCredential(credential).addOnCompleteListener { task ->\n            if (task.isSuccessful) {\n                onSuccess()\n            } else {\n                onFailure("Error al iniciar sesión con Firebase: ${task.exception?.message}")\n            }\n        }\n    }\n\n    fun signOut(onSuccess: () -> Unit) {\n        firebaseAuth.signOut()\n        googleSignInClient.signOut().addOnCompleteListener {\n            onSuccess()\n        }\n    }\n}\n\n```\n\n#### 5. Usar `AuthenticationManager` en tu aplicación\n\nPuedes usar la clase `AuthenticationManager` en tu aplicación para manejar el inicio de sesión y cierre de sesión de los usuarios. Aquí tienes un ejemplo de cómo utilizarla en una pantalla de inicio de sesión con Jetpack Compose:\n\n```kotlin\n@Composable\nfun SignInScreen(authenticationManager: AuthenticationManager) {\n    val context = LocalContext.current\n\n    val signInLauncher = rememberLauncherForActivityResult(\n        contract = ActivityResultContracts.StartActivityForResult()'}]