Saltar al contingut principal

Firebase Auth i Data Connect

Autenticació de Firebase​

El SDK de Firebase Auth està declarat com a dependència (libs.firebase.auth) i inclòs a la BOM de Firebase. Tot i això, en la versió actual de l'aplicació, el flux d'autenticació principal no delega a Firebase Auth: el login s'implementa mitjançant una consulta directa a la taula usuarios de Supabase comparant el DNI i la contrasenya.

Firebase Auth queda disponible per a una migració eventual del sistema d'autenticació a un flux basat en JWT estàndard (email/contrasenya, OAuth, etc.) sense necessitat d'afegir dependències addicionals.

DataConnectClient​

DataConnectClient.kt implementa un client HTTP manual per invocar l'endpoint del Firebase Data Connect. A diferència del SDK de Supabase, no hi ha un SDK de Kotlin per a Data Connect que estigui disponible en aquest context, per la qual cosa s'usa HttpURLConnection directament.

Configuració de l'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 subdomini regional europe-southwest1-dataconnect.googleapis.com és obligatori. L'ús del domini genèric dataconnect.googleapis.com retorna HTTP 404 quan el servei està desplegat en una regió diferent de us-central1.

Firma del mètode execute​

suspend fun execute(
query: String,
variables: Map<String, Any?> = emptyMap(),
operationName: String? = null
): JSONObject?
ParàmetreTipusDescripció
queryStringQuery o mutació GraphQL en format de cadena
variablesMap<String, Any?>Variables de l'operació GraphQL (opcional)
operationNameString?Nom de l'operació quan el document conté múltiples (opcional)

Valor de retorn: JSONObject amb la resposta completa de l'API (incloent-hi l'objecte data) o null si es va produir un error de xarxa o la resposta HTTP va ser no reeixida (codi fora del rang 200–299).

Capçaleres HTTP enviades​

CapçaleraValor
Content-Typeapplication/json
x-goog-api-keyAPI key del projecte Firebase
x-firebase-gmpidApp ID del projecte Firebase

Estructura del cos de la petició​

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

Els camps variables i operationName s'ometen del cos si no es proporcionen.

Gestió d'errors​

Els errors de xarxa (IOException, SocketTimeoutException, etc.) es capturen amb un bloc catch(Exception) i es lloguen amb Log.e("DataConnect", ...). En aquest cas el mètode torna null. Els errors HTTP (resposta amb codi fora del rang 200–299) es llegeixen del errorStream de la connexió i també es lloguen abans de tornar null.