Primeros pasos con Firebase SQL Connect en Android

En esta guía de inicio rápido, crearás e implementarás una pequeña base de datos de muestra y accederás a ella desde una app para Android.

Requisitos previos

Para completar este inicio rápido, necesitarás lo siguiente:

  • Un entorno con las siguientes herramientas instaladas:
    • Una versión reciente de Android Studio
    • La Firebase CLI Si tienes instalado NPM, ejecuta el siguiente comando:
      npm install -g firebase-tools@latest
      De lo contrario, consulta la documentación para obtener instrucciones de instalación.
  • Una Cuenta de Google

Instructivo

Instructivo

1. Crea un proyecto nuevo de Android Studio

En Android Studio, crea un proyecto nuevo con la plantilla Empty Activity.

Nombra el proyecto Quickstart App con el nombre del paquete com.example.quickstartapp.

Diálogo de nuevo proyecto de Android Studio

2. Agrega Firebase a tu proyecto de Android Studio

Agrega las dependencias de Firebase y el complemento de serialización de Kotlin a tus archivos build.gradle.kts.

QuickstartApp/build.gradle.kts
plugins {
  alias(libs.plugins.android.application) apply false
  alias(libs.plugins.kotlin.compose) apply false

  // Add this line.
  id("com.google.gms.google-services") version "4.4.4" apply false
}
QuickstartApp/app/build.gradle.kts
plugins {
  alias(libs.plugins.android.application)
  alias(libs.plugins.kotlin.compose)

  // Add these lines.
  kotlin("plugin.serialization") version libs.versions.kotlin
  id("com.google.gms.google-services")
}

// ...

dependencies {
  // ...

  // Add these lines.
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0")
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.11.0")

  implementation(platform("com.google.firebase:firebase-bom:34.14.0"))
  implementation("com.google.firebase:firebase-dataconnect")
}

3. Inicializa un proyecto de Firebase

Cambia al directorio del proyecto de Android Studio y, luego, inicializa un proyecto de Firebase en él.

cd ~/QuickstartApp
firebase login --reauth
firebase init dataconnect

Cuando se te solicite, elige las siguientes opciones:

  • Crea un proyecto de Firebase nuevo.
  • No crees un esquema con Gemini (en este instructivo, usarás un esquema de ejemplo prediseñado).
  • Aprovisiona una instancia y una base de datos de prueba gratuita de Cloud SQL.

Acepta los valores predeterminados para todos los demás mensajes.

A continuación, registra tu app para Android en tu proyecto de Firebase.

firebase apps:create -a com.example.quickstartapp android android-quickstart
firebase apps:sdkconfig android -o app/google-services.json

4. Revisa las definiciones de GraphQL de ejemplo

En SQL Connect, defines todos los esquemas y las operaciones de tu base de datos con GraphQL. Cuando inicializaste tu proyecto, la CLI de Firebase creó algunas definiciones de ejemplo para que comiences.

dataconnect/schema/schema.gql (fragmento)
type Movie @table {
  title: String!
  imageUrl: String!
  genre: String
}

type MovieMetadata @table {
  movie: Movie! @unique
  rating: Float
  releaseYear: Int
  description: String
}
dataconnect/example/queries.gql (fragmento)
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

5. Implementa tus esquemas y operaciones

Cada vez que realices cambios en los esquemas, las consultas o las mutaciones de tu base de datos, debes implementarlos para que los cambios se apliquen en la base de datos.

firebase deploy --only dataconnect

6. Propaga la base de datos con datos de muestra

Estos datos iniciales te permitirán tener algo para ver cuando pruebes la app de ejemplo. Ten en cuenta que, en este paso, ejecutarás GraphQL arbitrario, lo que se permite para las tareas administrativas.

firebase dataconnect:execute dataconnect/seed_data.gql

7. Genera un SDK cliente para Android

Este comando usa tus definiciones de GraphQL para generar un SDK de cliente para Android específicamente para tu base de datos. Usas esta biblioteca en tu app cliente para realizar todas las operaciones de la base de datos.

Puedes generar bibliotecas para varias plataformas, como Swift para iOS, JavaScript para la Web y Flutter, agregando definiciones a connector.yaml.

firebase dataconnect:sdk:generate
SDK de Android generado automáticamente (fragmento)
public interface ExampleConnector : GeneratedConnector<ExampleConnector> {
  override val dataConnect: com.google.firebase.dataconnect.FirebaseDataConnect

  public val listMovies: ListMoviesQuery

  // ...
}

8. Escribe un cliente de Android de muestra

Reemplaza el contenido de app/src/main/java/com/example/sequel/MainActivity.kt con esta sencilla app para Android.

Observa que la app completa el acceso a la base de datos necesario con una función del SDK generado.

package com.example.quickstartapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import com.example.quickstartapp.ui.theme.QuickstartAppTheme
import com.google.firebase.dataconnect.generated.ExampleConnector
import com.google.firebase.dataconnect.generated.ListMoviesQuery
import com.google.firebase.dataconnect.generated.execute
import com.google.firebase.dataconnect.generated.instance

class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContent {
      QuickstartAppTheme() {
        Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
          var movies by remember {
            mutableStateOf(emptyList<ListMoviesQuery.Data.MoviesItem>())
          }
          LaunchedEffect(Unit) {
            // Queries need to be executed in a coroutine context
            try {
              movies = ExampleConnector.instance.listMovies.execute().data.movies
            } catch (e: Exception) {
              // TODO: Handle error, e.g., show a Toast or update a state variable to
              //   display an error message.
            }
          }
          LazyColumn(modifier = Modifier.padding(innerPadding)) {
            items(movies) { movie ->
              Text(text = movie.title)
            }
          }
        }
      }
    }
  }
}

9. Probar la aplicación

Desde Android Studio, ejecuta la app de ejemplo para verla en acción.

Próximos pasos

Prueba la extensión de VS Code de SQL Connect

Cuando desarrolles con SQL Connect, te recomendamos que uses la extensión SQL Connect de VS Code. Incluso si no usas Visual Studio Code como tu entorno de desarrollo principal, la extensión proporciona varias funciones que facilitan el desarrollo de esquemas y operaciones:

  • Un servidor de lenguaje GraphQL que proporciona sugerencias de autocompletar y verificación de sintaxis específicas para SQL Connect
  • Botones de CodeLens en línea con tu código que te permiten leer y escribir datos desde tus archivos de definición de esquema, y ejecutar consultas y mutaciones desde tus definiciones de operación
  • Mantén automáticamente sincronizados los SDKs generados con tus definiciones de GraphQL.
  • Configuración simplificada del emulador local
  • Implementación simplificada en producción

Usa el emulador SQL Connect para el desarrollo local

Si bien en este instructivo se mostró cómo implementar esquemas y operaciones de SQL Connect directamente en producción, es probable que no desees realizar cambios en tu base de datos de producción mientras desarrollas tu app de forma activa. En cambio, configura el emulador de SQL Connect y realiza tu trabajo de desarrollo en él en lugar de en producción. El emulador configura una instancia local de PGlite que se comporta de manera similar a una instancia activa de PostgreSQL en Cloud SQL.

Aprende a escribir esquemas y operaciones para tu app

Cuando desarrolles apps con SQL Connect, el diseño de tus esquemas y operaciones será una de las primeras y más importantes tareas de desarrollo que completarás.

  • Gemini en la consola de Firebase es una herramienta de IA que puede generar esquemas de SQL Connect a partir de una descripción en lenguaje natural de tu app. Esta herramienta puede ayudarte a comenzar muy rápido, en especial si nunca trabajaste con bases de datos relacionales.
  • También puedes escribir esquemas de bases de datos, consultas y mutaciones directamente con GraphQL. Comienza con la guía en Diseña esquemas de SQL Connect y, luego, continúa con las páginas de seguimiento para aprender a escribir operaciones.