assistant: Para poder conectar tu aplicación de Android programada en Kotlin y Jetpack Compose utiliando la API de Firebase para autenticar a un usuario con Google Auth, puedes realizar los siguientes pasos:

Primero agrega la dependencia de Firebase Authentication en tu archivo build.gradle en el módulo de la aplicación:

      implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'


Luego crea un proyecto en Firebase Console y agrega tu aplicación de Android, dónde debes de asegúrarte de descargar el archivo de configuración google-services.json y agregarlo a la carpeta app de tu proyecto.

Posteriormente en tu archivo AndroidManifest.xml, debes agregar la siguiente actividad para poder manejar el inicio de sesión con Google Auth:

      <activity
         android:name="com.google.firebase.auth.internal.GenericIdpActivity"
         android:theme="@style/FirebaseUI.Theme"
         android:windowSoftInputMode="adjustResize">
            <intent-filter>
               <action android:name="android.intent.action.VIEW" />
               <category android:name="android.intent.category.DEFAULT" />
               <category android:name="android.intent.category.BROWSABLE" />
               <data android:scheme="com.example.myapp" />
            </intent-filter>
      </activity>

Ahora en tu archivo build.gradle en el módulo de la aplicación, debes agrega la siguiente regla en la sección defaultConfig:

      manifestPlaceholders = [    "appAuthRedirectScheme": "com.example.myapp"]

Para después en tu actividad de inicio de sesión, crear un objeto de GoogleSignInOptions dónde para configurar el inicio de sesión con Google debes crear un objeto GoogleSignInClient utilizando el GoogleSignInOptions, de la siguiente manera:

      val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
          .requestIdToken(getString(R.string.default_web_client_id))
          .requestEmail()
          .build()

      val googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions)

Por otro lado en tu diseño de Jetpack Compose, debes agregar un botón para el inicio de sesión con Google, dónde cuando el botón sea presionado, debe ser llamado el siguiente método para iniciar el proceso de inicio de sesión con Google:

      fun signInWithGoogle(activity: Activity, googleSignInClient: GoogleSignInClient) {
          val signInIntent = googleSignInClient.signInIntent
          activity.startActivityForResult(signInIntent, RC_SIGN_IN)
      }

Considera que "RC_SIGN_IN" es una constante para el código de solicitud utilizado en startActivityForResult.

Para finalizar en tu actividad de inicio de sesión, sobrescribe el método onActivityResult para manejar la respuesta del inicio de sesión con Google, dónde si el inicio de sesión es exitoso, llama al método firebaseAuthWithGoogle para autenticar al usuario con Firebase:

      override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
          super.onActivityResult(requestCode, resultCode, data)

          if (requestCode == RC_SIGN_IN) {
              val task = GoogleSignIn.getSignedInAccountFromIntent(data)
              try {
                  val account = task.getResult(ApiException::class.java)
                  firebaseAuthWithGoogle(account.idToken!!)
              } catch (e: ApiException) {
                  Log.w(TAG, "Google sign in failed", e)
              }
          }
      }

      private fun firebaseAuthWithGoogle(idToken: String) {
          val credential = GoogleAuthProvider.getCredential(idToken, null)
          Firebase.auth.signInWithCredential(credential)
              .addOnCompleteListener(this) { task ->
                  if (task.isSuccessful) {
                      // El inicio de sesión con Google fue exitoso, puedes ir a la siguiente actividad.
                 }
          }
      }