במדריך למתחילים הזה תלמדו איך לפתח את Firebase Data Connect באפליקציה באמצעות מכונה של SQL בסביבת הייצור. תצטרכו:
- מוסיפים את Firebase Data Connect לפרויקט Firebase.
- הקצאת מכונה של Cloud SQL לאפליקציה.
- הגדרת סביבת פיתוח שכוללת תוסף של Visual Studio Code לעבודה עם מכונה בסביבת הייצור.
- לאחר מכן נסביר איך:
- יצירת סכימה לאפליקציית סרטים
- מגדירים שאילתות ומוטציות שישמשו באפליקציה
- בדיקת השאילתות והמוטציות באמצעות נתונים לדוגמה
- יצירת ערכות SDK עם סוגים מוגדרים ושימוש בהן באפליקציה
- פורסים את הסכימה, השאילתות והנתונים הסופיים בענן.
יצירת פרויקט Firebase ומסד נתונים ב-Cloud SQL
- אם עדיין לא עשיתם זאת, יוצרים פרויקט ב-Firebase.
- במסוף Firebase, לוחצים על Add project ופועלים לפי ההוראות במסך.
- עוברים לקטע Data Connect במסוף Firebase ופועלים לפי תהליך העבודה להגדרת המוצר.
שדרוג הפרויקט לתוכנית Blaze. כך תוכלו ליצור מכונה של Cloud SQL ל-PostgreSQL.
בוחרים מיקום למסד הנתונים של Cloud SQL ל-PostgreSQL.
שימו לב לשמות ולמזהים של הפרויקט, השירות ומסד הנתונים, כדי לאשר אותם בהמשך.
מבצעים את שאר תהליך ההגדרה ולוחצים על סיום.
בחירת תהליך פיתוח
יש שתי דרכים להתקין כלים לפיתוח ב-Data Connect.
הגדרת סביבת הפיתוח
- יוצרים ספרייה חדשה לפרויקט המקומי.
מריצים את הפקודה הבאה בספרייה החדשה שיצרתם.
curl -sL https://firebase.tools/dataconnect | bash
הסקריפט הזה מנסה להגדיר את סביבת הפיתוח ולהפעיל סביבת פיתוח משולבת (IDE) מבוססת-דפדפן. סביבת הפיתוח המשולבת הזו מספקת כלים, כולל תוסף מובנה ל-VS Code, שיעזרו לכם לנהל את הסכימה ולהגדיר שאילתות ומוטציות לשימוש באפליקציה, וגם ליצור ערכות SDK עם סוגים מוגדרים.
alias dataconnect='curl -sL https://firebase.tools/dataconnect | bash'
הגדרת ספריית הפרויקט
כדי להגדיר את הפרויקט המקומי, צריך לאתחל את ספריית הפרויקט. בחלון ה-IDE, לוחצים על סמל Firebase בחלונית הימנית כדי לפתוח את ממשק המשתמש של התוסף Data Connect ל-VS Code:
- לוחצים על הלחצן כניסה באמצעות חשבון Google.
- לוחצים על הלחצן Connect a Firebase project ובוחרים את הפרויקט שיצרתם קודם במסוף.
- לוחצים על הלחצן Run firebase init ומשלימים את התהליך.
לוחצים על הלחצן Start emulators.
יצירת סכימה
בספרייה של פרויקט Firebase, בקובץ /dataconnect/schema/schema.gql
, מתחילים להגדיר סכימה של GraphQL שכוללת סרטים.
סרט
ב-Data Connect, שדות GraphQL ממופים לעמודות. הסוג Movie
כולל את הערכים id
, title
, imageUrl
ו-genre
. Data Connect
מזהה את סוגי הנתונים הפרימיטיביים String
ו-UUID
.
מעתיקים את קטע הקוד הבא או מסירים את ההערות מהשורות המתאימות בקובץ.
# File `/dataconnect/schema/schema.gql`
# By default, a UUID id key will be created by default as primary key.
type Movie @table {
id: UUID! @default(expr: "uuidV4()")
title: String!
imageUrl: String!
genre: String
}
MovieMetadata
עכשיו, כשיש לכם סרטים, אתם יכולים ליצור מודל של מטא-נתונים של סרטים.
מעתיקים את קטע הקוד הבא או מסירים את ההערות מהשורות המתאימות בקובץ.
# Movie - MovieMetadata is a one-to-one relationship
type MovieMetadata @table {
# This time, we omit adding a primary key because
# you can rely on Data Connect to manage it.
# @unique indicates a 1-1 relationship
movie: Movie! @unique
# movieId: UUID <- this is created by the above reference
rating: Float
releaseYear: Int
description: String
}
שימו לב שהשדה movie
ממופה לסוג Movie
.
Data Connect מבינה שמדובר בקשר בין Movie
לבין MovieMetadata
, ותנהל את הקשר הזה בשבילך.
מידע נוסף על סכימות של Data Connect זמין במסמכי התיעוד
פריסה של הסכימה בסביבת הייצור
לפני שממשיכים, צריך לפרוס את הסכימה.
בממשק המשתמש של התוסף, לוחצים על פריסה בסביבת הייצור בחלונית Firebase Data Connect.
אחרי הפריסה של הסכימה במסד הנתונים בסביבת הייצור, תוכלו לראות אותה במסוף Firebase.
הוספת נתונים לטבלאות
בחלונית העריכה של סביבת הפיתוח המשולבת, תוכלו לראות את הלחצנים של CodeLens מופיעים מעל סוגי GraphQL ב-/dataconnect/schema/schema.gql
. מאחר שהפרסתם את הסכימה בסביבת הייצור, תוכלו להשתמש בלחצנים Add data ו-Run (Production) כדי להוסיף נתונים למסד הנתונים בקצה העורפי.
כדי להוסיף רשומות לטבלה Movie
:
- ב-
schema.gql
, לוחצים על הלחצן Add data מעל הצהרת הסוגMovie
.
- בקובץ
Movie_insert.gql
שנוצר, מקודדים את הנתונים של ארבעת השדות. - לוחצים על הלחצן Run (Production).
- חוזרים על השלבים הקודמים כדי להוסיף רשומה לטבלה
MovieMetadata
, ומספקים את הערך שלid
של הסרט בשדהmovieId
, כפי שמופיע בהנחיה במונטיזציה שנוצרה שלMovieMetadata_insert
.
כדי לוודא במהירות שהנתונים נוספו:
- חזרה ב-
schema.gql
, לוחצים על הלחצן Read data מעל להצהרת הטיפוסMovie
. - בקובץ
Movie_read.gql
שנוצר, לוחצים על הלחצן Run (Production) כדי להריץ את השאילתה.
מידע נוסף על מוטציות של Data Connect זמין במסמכי התיעוד
הגדרת השאילתה
עכשיו החלק הכיפי – שאילתות. כמפתחים, אתם רגילים לכתוב שאילתות SQL ולא שאילתות GraphQL, ולכן יכול להיות שבהתחלה זה ייראה לכם קצת שונה. עם זאת, GraphQL הוא מצומצם הרבה יותר ומאובטח יותר מבחינת סוגים מ-SQL גולמי. התוסף שלנו ל-VS Code מקל על חוויית הפיתוח.
מתחילים לערוך את הקובץ /dataconnect/connector/queries.gql
. כדי לקבל את כל הסרטים, משתמשים בשאילתה כזו.
# File `/dataconnect/connector/queries.gql`
# @auth() directives control who can call each operation.
# Anyone should be able to list all movies, so the auth level
# is set to PUBLIC
query ListMovies @auth(level: PUBLIC) {
movies {
id
title
imageUrl
genre
}
}
מריצים את השאילתה באמצעות לחצן CodeLens שנמצא בקרבת מקום.
מידע נוסף על שאילתות של Data Connect זמין במסמכי התיעוד
יצירת ערכות SDK
- לוחצים על הלחצן Add SDK to app (הוספת ה-SDK לאפליקציה).
בתיבת הדו-שיח שתופיע, בוחרים ספרייה שמכילה את הקוד של האפליקציה. קוד ה-SDK של Data Connect ייווצר ויישמר שם.
בוחרים את פלטפורמת האפליקציה, שימו לב שקוד ה-SDK נוצר באופן מיידי בתיקייה שנבחרה.
פריסה של הסכימה והשאילתה בסביבת הייצור
סיימתם מחזור פיתוח. עכשיו אפשר לפרוס את הסכימה, הנתונים והשאילתות בשרת באמצעות ממשק המשתמש של התוסף של Firebase או באמצעות ה-CLI של Firebase, בדיוק כמו שפרוסתם את הסכימה.
בחלון ה-IDE, בממשק המשתמש של התוסף ל-VS Code, לוחצים על הלחצן פריסה בסביבת הייצור.
אחרי הפריסה, עוברים למסוף Firebase כדי לוודא שהסכימה, הפעולות והנתונים הועלאו לענן. תוכלו גם להציג את הסכימה ולהריץ את הפעולות במסוף. המכונה של Cloud SQL for PostgreSQL תתעדכן עם הסכימה והנתונים שנוצרו לפריסה הסופית.
מידע נוסף על השימוש במהנתח Data Connect זמין במסמכי התיעוד
שימוש ב-SDK כדי להפעיל את השאילתה מאפליקציה
עכשיו, אחרי שהסכימה והשאילתה נפרסו בסביבת הייצור, אפשר להשתמש ב-SDK שנוצר על ידי Data Connect כדי להטמיע קריאה לשאילתה ListMovies
.
אינטרנט
- מוסיפים את Firebase לאפליקציית האינטרנט.
בקובץ הראשי של אפליקציית React:
- מייבאים את ה-SDK שנוצר
- קריאה לשיטות Data Connect.
import React from 'react'; import ReactDOM from 'react-dom/client'; // Generated queries. // Update as needed with the path to your generated SDK. import { listMovies, ListMoviesData } from '@movie-app/movies'; function App() { const [movies, setMovies] = useState<ListMoviesData['movies']>([]); useEffect(() => { listMovies.then(res => setMovies(res.data)); }, []); return ( movies.map(movie => <h1>{movie.title}</h1>); ); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<App />);
Swift
- מוסיפים את Firebase לאפליקציה ל-iOS.
כדי להשתמש ב-SDK שנוצר, צריך להגדיר אותו כיחס תלות ב-Xcode.
בסרגל הניווט העליון של Xcode, בוחרים באפשרות File > Add Package Dependencies > Add Local ובוחרים את התיקייה שמכילה את הקובץ
Package.swift
שנוצר.במתווך הראשי של האפליקציה:
- מייבאים את ה-SDK שנוצר
- קריאה לשיטות Data Connect.
import SwiftUI import FirebaseDataConnect // Generated queries. // Update as needed with the package name of your generated SDK. import <CONNECTOR-PACKAGE-NAME> let connector = DataConnect.moviesConnector struct ListMovieView: View { @StateObject private var queryRef = connector.listMovies.ref() var body: some View { VStack { Button { Task { do { try await refresh() } catch { print("Failed to refresh: \(error)") } } } label: { Text("Refresh") } // use the query results in a view ForEach(queryRef.data?.movies ?? []) { movie in Text(movie.title) } } } @MainActor func refresh() async throws { _ = try await queryRef.execute() } struct ContentView_Previews: PreviewProvider { static var previews: some View { ListMovieView() } }
Kotlin Android
- מוסיפים את Firebase לאפליקציה ל-Android.
כדי להשתמש ב-SDK שנוצר, צריך להגדיר את Data Connect כיחס תלות ב-Gradle.
מעדכנים את
plugins
ואתdependencies
ב-app/build.gradle.kts
.plugins { // Use whichever versions of these dependencies suit your application. // The versions shown here were the latest as of March 14, 2025. // Note, however, that the version of kotlin("plugin.serialization") must, // in general, match the version of kotlin("android"). id("com.android.application") version "8.9.0" id("com.google.gms.google-services") version "4.4.2" val kotlinVersion = "2.1.10" kotlin("android") version kotlinVersion kotlin("plugin.serialization") version kotlinVersion } dependencies { // Use whichever versions of these dependencies suit your application. // The versions shown here were the latest versions as of March 14, 2025. implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta04") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1") implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3") // These dependencies are not strictly required, but will very likely be used // when writing modern Android applications. implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0") implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.activity:activity-ktx:1.10.1") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7") implementation("com.google.android.material:material:1.12.0") }
בפעילות הראשית של האפליקציה:
- מייבאים את ה-SDK שנוצר
- קריאה לשיטות Data Connect.
import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import kotlinx.coroutines.launch private val connector = com.myapplication.MoviesConnector.instance class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val textView: TextView = findViewById(R.id.text_view) lifecycleScope.launch { lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) { val result = connector.listMovies.runCatching { execute { } } val newTextViewText = result.fold( onSuccess = { val titles = it.data.movies.map { it.title } "${titles.size} movies: " + titles.joinToString(", ") }, onFailure = { "ERROR: ${it.message}" } ) textView.text = newTextViewText } } } }
Flutter
- מוסיפים את Firebase לאפליקציה ב-Flutter.
- מתקינים את ה-CLI של flutterfire
dart pub global activate flutterfire_cli
. - מריצים את
flutterfire configure
. - בפונקציה הראשית של האפליקציה:
- מייבאים את ה-SDK שנוצר
- קריאה לשיטות Data Connect.
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'firebase_options.dart';
// Generated queries.
// Update as needed with the path to your generated SDK
import 'movies_connector/movies.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(children: [
ConstrainedBox(
constraints: const BoxConstraints(maxHeight: 200),
child: FutureBuilder(
future: MoviesConnector.instance.listMovies().execute(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
scrollDirection: Axis.vertical,
itemBuilder: (context, index) => Card(
child: Text(
snapshot.data!.data.movies[index].title,
)),
itemCount: snapshot.data!.data.movies.length,
);
}
return const CircularProgressIndicator();
}),
)
])));
}
}
השלבים הבאים
בודקים את הפרויקט שנפרס ומכירים כלים נוספים:
אפשר להוסיף נתונים למסד הנתונים, לבדוק ולשנות את הסכימות ולעקוב אחרי שירות Data Connect במסוף Firebase. מידע נוסף זמין במסמכי התיעוד. לדוגמה, אחרי שתסיימו את המדריך למתחילים:
מידע נוסף על יצירת ערכות SDK ללקוח ועל קריאה לשאילתות ולמוטציות מקוד הלקוח ב-אינטרנט, ב-Android, ב-iOS וב-Flutter.