איך מתחילים להשתמש ב-Firebase SQL Connect ב-Android

במדריך למתחילים הזה, תיצרו ותפרסו מסד נתונים קטן לדוגמה ותגשו אליו מאפליקציית Android.

דרישות מוקדמות

כדי להשלים את המדריך למתחילים הזה, תצטרכו:

  • סביבה שמותקנים בה הכלים הבאים:
    • גרסה עדכנית של Android Studio.
    • Firebase CLI. אם NPM מותקן, מריצים את הפקודה:
      npm install -g firebase-tools@latest
      אחרת, אפשר לעיין במסמכים כדי לקבל הוראות התקנה.
  • חשבון Google.

מדריך

מדריך

1. יצירת פרויקט חדש ב-Android Studio

ב-Android Studio, יוצרים פרויקט חדש באמצעות התבנית Empty Activity (פעילות ריקה).

נותנים לפרויקט את השם Quickstart App עם שם החבילה com.example.quickstartapp.

תיבת דו-שיח של פרויקט חדש ב-Android Studio

2. הוספת Firebase לפרויקט ב-Android Studio

מוסיפים את התלויות של Firebase ואת התוסף של סריאליזציה של Kotlin לקבצים 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. הפעלת פרויקט Firebase

עוברים לספריית הפרויקט ב-Android Studio ומפעילים בה פרויקט Firebase.

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

כשמופיעה בקשה, בוחרים באפשרויות הבאות:

  • יוצרים פרויקט חדש ב-Firebase.
  • אל תיצרו סכימה באמצעות Gemini (במדריך הזה תשתמשו בסכימה לדוגמה שכבר נוצרה).
  • הקצאת משאבים של מסד נתונים ומופע Cloud SQL לתקופת ניסיון בחינם.

מאשרים את ערכי ברירת המחדל בכל שאר ההנחיות.

לאחר מכן, רושמים את אפליקציית Android בפרויקט Firebase.

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

4. בדיקת ההגדרות לדוגמה של GraphQL

ב-SQL Connect, מגדירים את כל הסכימות והפעולות של מסד הנתונים באמצעות GraphQL. כשאתם מאתחלים את הפרויקט, ה-CLI של Firebase יוצר כמה הגדרות לדוגמה כדי לעזור לכם להתחיל.

dataconnect/schema/schema.gql (קטע)
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 (קטע)
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

5. פריסת הסכימות והפעולות

בכל פעם שמבצעים שינויים בסכימות של מסדי הנתונים, בשאילתות או במוטציות, צריך לפרוס אותם כדי שהשינויים יחולו על מסד הנתונים.

firebase deploy --only dataconnect

6. הוספת נתונים לדוגמה למסד הנתונים

נתוני ה-seed האלה יאפשרו לכם לראות משהו כשבודקים את האפליקציה לדוגמה. שימו לב: בשלב הזה אתם מריצים GraphQL שרירותי, וזה מותר למשימות ניהול.

firebase dataconnect:execute dataconnect/seed_data.gql

7. יצירת SDK של לקוח Android

הפקודה הזו משתמשת בהגדרות GraphQL כדי ליצור Android client SDK שמיועד במיוחד למסד הנתונים שלכם. משתמשים בספרייה הזו באפליקציית הלקוח כדי לבצע את כל פעולות מסד הנתונים.

אפשר ליצור ספריות לכמה פלטפורמות, כולל Swift ל-iOS,‏ JavaScript לאינטרנט ו-Flutter, על ידי הוספת הגדרות ל-connector.yaml.

firebase dataconnect:sdk:generate
Android SDK שנוצר אוטומטית (קטע)
public interface ExampleConnector : GeneratedConnector<ExampleConnector> {
  override val dataConnect: com.google.firebase.dataconnect.FirebaseDataConnect

  public val listMovies: ListMoviesQuery

  // ...
}

8. כתיבת לקוח לדוגמה ל-Android

מחליפים את התוכן של app/src/main/java/com/example/sequel/MainActivity.kt באפליקציית Android הפשוטה הזו.

שימו לב שהאפליקציה משלימה את הגישה הנדרשת למסד הנתונים באמצעות פונקציה מתוך ה-SDK שנוצר.

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. לניסיון האפליקציה

מריצים את האפליקציה לדוגמה מ-Android Studio כדי לראות אותה בפעולה.

השלבים הבאים

כדאי לנסות את התוסף SQL Connect VS Code

כשמפתחים באמצעות SQL Connect, מומלץ מאוד להשתמש בתוסף SQL Connect ל-VS Code. גם אם אתם לא משתמשים ב-Visual Studio Code כסביבת הפיתוח העיקרית שלכם, התוסף מספק כמה תכונות שהופכות את הפיתוח של סכימות ופעולות לנוח יותר:

  • שרת שפה של GraphQL, שמספק בדיקת תחביר והצעות להשלמה אוטומטית שספציפיות ל-SQL Connect
  • לחצני CodeLens בשורה עם הקוד שמאפשרים לקרוא ולכתוב נתונים מקובצי הגדרת הסכימה, ולהריץ שאילתות ושינויים מהגדרות הפעולה.
  • שמירה אוטומטית של סנכרון בין ערכות ה-SDK שנוצרו לבין הגדרות GraphQL.
  • הגדרה פשוטה יותר של אמולטור מקומי.
  • פריסה פשוטה יותר בסביבת הייצור.

שימוש באמולטור SQL Connect לפיתוח מקומי

במדריך הזה הראינו איך פורסים סכימות ופעולות ישירות בסביבת הייצור, אבל סביר להניח שלא תרצו לבצע שינויים במסד הנתונים של סביבת הייצור בזמן שאתם מפתחים את האפליקציה. במקום זאת, מומלץ להגדיר את אמולטור SQL Connect ולבצע את עבודת הפיתוח מולו ולא מול סביבת הייצור.SQL Connect האמולטור מגדיר מופע מקומי של PGlite שמתנהג באופן דומה למופע פעיל של PostgreSQL ב-Cloud SQL.

איך כותבים סכימות ופעולות לאפליקציה

כשמפתחים אפליקציות באמצעות SQL Connect, עיצוב הסכימות והפעולות הוא אחת ממשימות הפיתוח הראשונות והחשובות ביותר שתבצעו.

  • Gemini במסוף Firebase הוא כלי מבוסס-AI שיכול ליצור SQL Connect סכימות מתיאור של האפליקציה בשפה טבעית. הכלי הזה יכול לעזור לכם להתחיל לעבוד במהירות, במיוחד אם אף פעם לא עבדתם עם מסדי נתונים רלציוניים.
  • לחלופין, אפשר לכתוב סכימות של מסדי נתונים, שאילתות ומוטציות ישירות באמצעות GraphQL. כדאי להתחיל עם ההנחיות במאמר בנושא תכנון סכימות של SQL Connect, ואז להמשיך לדפים הבאים כדי ללמוד איך לכתוב פעולות.