Skip to main content

Firebase Auth y Data Connect

Firebase Authentication​

El SDK de Firebase Auth está declarado como dependencia (libs.firebase.auth) e incluido en la BOM de Firebase. Sin embargo, en la versión actual de la aplicación, el flujo de autenticación principal no delega en Firebase Auth: el login se implementa mediante una consulta directa a la tabla usuarios de Supabase comparando el DNI y la contraseña.

Firebase Auth queda disponible para una eventual migración del sistema de autenticación a un flujo basado en JWT estándar (email/contraseña, OAuth, etc.) sin necesidad de añadir dependencias adicionales.

DataConnectClient​

DataConnectClient.kt implementa un cliente HTTP manual para invocar el endpoint de Firebase Data Connect. A diferencia del SDK de Supabase, no existe un SDK de Kotlin para Data Connect que esté disponible en este contexto, por lo que se usa HttpURLConnection directamente.

Configuracion del endpoint​

object DataConnectClient {
private const val API_KEY = "<api-key-de-ejemplo>..."
private const val APP_ID = "<app-id-de-ejemplo>..."
private const val ENDPOINT =
"https://europe-southwest1-dataconnect.googleapis.com/v1beta/projects/tu-proyecto.../connectors/default:executeGraphql" +
"/locations/europe-southwest1/services/tu-proyecto.../connectors/default:executeGraphql"
}

El subdominio regional europe-southwest1-dataconnect.googleapis.com es obligatorio. El uso del dominio genérico dataconnect.googleapis.com devuelve HTTP 404 cuando el servicio está desplegado en una región distinta a us-central1.

Firma del metodo execute​

suspend fun execute(
query: String,
variables: Map<String, Any?> = emptyMap(),
operationName: String? = null
): JSONObject?
ParámetroTipoDescripción
queryStringQuery o mutación GraphQL en formato de cadena
variablesMap<String, Any?>Variables de la operación GraphQL (opcional)
operationNameString?Nombre de la operación cuando el documento contiene múltiples (opcional)

Valor de retorno: JSONObject con la respuesta completa de la API (incluyendo el objeto data) o null si se produjo un error de red o la respuesta HTTP fue no exitosa (código fuera del rango 200–299).

Cabeceras HTTP enviadas​

CabeceraValor
Content-Typeapplication/json
x-goog-api-keyAPI key del proyecto Firebase
x-firebase-gmpidApp ID del proyecto Firebase

Estructura del cuerpo de la peticion​

{
"query": "query GetUsuarios { usuarios { id nombre } }",
"variables": {
"id": 42
},
"operationName": "GetUsuarios"
}

Los campos variables y operationName se omiten del cuerpo si no se proporcionan.

Gestion de errores​

Los errores de red (IOException, SocketTimeoutException, etc.) se capturan con un bloque catch(Exception) y se loguean con Log.e("DataConnect", ...). En ese caso el método devuelve null. Los errores HTTP (respuesta con código fuera del rango 200–299) se leen del errorStream de la conexión y también se loguean antes de devolver null.