שימוש ב-SDKs של Android שנוצרו

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

כמו שציינו קודם, חשוב לציין ששאילתות ומוטציות של Data Connect לא נשלחות באמצעות קוד לקוח ולא מופעלות בשרת. במקום זאת, כשפורסים פעולות Data Connect, הן מאוחסנות בשרת כמו ב-Cloud Functions. כלומר, צריך לפרוס את השינויים המתאימים בצד הלקוח כדי למנוע שיבושים אצל משתמשים קיימים (לדוגמה, בגרסאות ישנות יותר של האפליקציה).

לכן, Data Connect מספק סביבה לפיתוח וכלים שמאפשרים ליצור אב טיפוס של הסכימות, השאילתות והמוטציות שנפרסות בשרת. בנוסף, המערכת יוצרת באופן אוטומטי ערכות SDK בצד הלקוח בזמן יצירת אב טיפוס.

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

יצירת SDK של Kotlin

כמו ברוב הפרויקטים ב-Firebase, העבודה על קוד הלקוח של Firebase Data Connect מתבצעת בספריית פרויקט מקומית. גם התוסף של Data Connect ל-VS Code וגם ה-CLI של Firebase הם כלים מקומיים חשובים ליצירה ולניהול של קוד לקוח.

אפשרויות היצירה של ה-SDK מוגדרות במספר רשומות בקובץ dataconnect.yaml שנוצר כשאתם מפעילים את הפרויקט.

אתחול היצירה של ה-SDK

ב-connector.yaml, מוסיפים את outputDir, את package ואת ה-packageJsonDir (ל-SDK לאינטרנט).
connectorId: movies
generate:
  kotlinSdk:
    outputDir: ../../../src/main/java/com/myapplication
    package: com.myapplication

מחליפים את outputDir בנתיב של הספרייה שבה יוצב הקוד שנוצר. הנתיב הזה הוא יחסי לספרייה שמכילה את הקובץ connector.yaml עצמו. מחליפים את package בהצהרה על חבילת Kotlin שרוצים להשתמש בה בקבצים שנוצרים, או משמיטים את package כדי להשתמש בחבילת ברירת המחדל.

עדכון חבילות SDK במהלך פיתוח אב טיפוס

אם אתם יוצרים אב טיפוס באופן אינטראקטיבי באמצעות התוסף של Data Connect ל-VS Code והמעבד Data Connect, קובצי המקור של ה-SDK נוצרים ומתעדכנים באופן אוטומטי בזמן שאתם משנים את קובצי ה-.gql שמגדירים סכימות, שאילתות ומוטציות. זו יכולה להיות תכונה שימושית בתהליכי עבודה של טעינה (מחדש) חמה.

בתרחישים אחרים, אם אתם משתמשים במהדמ Data Connect מ-CLI של Firebase, תוכלו להגדיר מעקב אחרי עדכוני .gql וגם לעדכן באופן אוטומטי את מקורות ה-SDK.

לחלופין, אפשר להשתמש ב-CLI כדי ליצור מחדש את ערכות ה-SDK בכל פעם שקובצי ה-gql משתנים:

firebase dataconnect:sdk:generate --watch

יצירת ערכות SDK לשילוב ולגרסאות ייצור

במקרים מסוימים, כמו הכנת מקורות של פרויקטים לשליחה לבדיקות CI, אפשר להפעיל את ה-CLI של Firebase כדי לבצע עדכון באצווה.

במקרים כאלה, צריך להשתמש ב-firebase dataconnect:sdk:generate.

הגדרת קוד לקוח

שילוב של Data Connect בקוד הלקוח

כדי להגדיר את קוד הלקוח כך שישתמש ב-Data Connect וב-SDK שנוצר, צריך לפעול לפי הוראות ההגדרה הרגילות של Firebase.

לאחר מכן מוסיפים את הקטע הבא לקטע plugins בקובץ app/build.gradle.kts:

// The Firebase team tests with version 1.8.22; however, other 1.8 versions,
// and all newer versions are expected work too.
kotlin("plugin.serialization") version "1.8.22" // MUST match the version of the Kotlin compiler

לאחר מכן מוסיפים את הפרטים הבאים לקטע dependencies ב-app/build.gradle.kts:

implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1")
implementation("com.google.firebase:firebase-auth:23.1.0") // Optional
implementation("com.google.firebase:firebase-appcheck:18.0.0") // Optional

אתחול של Android SDK של Data Connect

מאתחלים את המכונה של Data Connect באמצעות המידע ששימש להגדרת Data Connect (הכול זמין בכרטיסייה Data Connect במסוף Firebase).

האובייקט ConnectorConfig

ב-SDK נדרש אובייקט תצורה של מחבר.

האובייקט הזה נוצר באופן אוטומטי מ-serviceId ו-location ב-dataconnect.yaml, ומ-connectorId ב-connector.yaml.

אחזור מופע של מחבר

אחרי שמגדירים אובייקט תצורה, מקבלים מופע של המחבר Data Connect. הקוד של המחבר ייווצר על ידי האמולטור Data Connect. אם שם המחבר הוא movies וחבילת Kotlin היא com.myapplication, כפי שצוין בקובץ connector.yaml, צריך לאחזר את אובייקט המחבר באמצעות הקריאה:

val connector = com.myapplication.MoviesConnector.instance

הרצת שאילתות ומוטציות

באמצעות אובייקט המחבר, אפשר להריץ שאילתות ומוטציות כפי שמוגדרות בקוד המקור של GraphQL. נניח שהפעולות הבאות מוגדרות במחבר:

mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
  movie_insert(data: {
    title: $title
    releaseYear: $releaseYear
    genre: $genre
    rating: $rating
  })
}

query getMovieByKey($key: Movie_Key!) {
  movie(key: $key) { id title }
}

query listMoviesByGenre($genre: String!) {
  movies(where: {genre: {eq: $genre}}) {
    id
    title
  }
}

תוכלו ליצור ולשלוף סרט באופן הבא:

val connector = MoviesConnector.instance

val addMovieResult1 = connector.createMovie.execute(
  title = "Empire Strikes Back",
  releaseYear = 1980,
  genre = "Sci-Fi",
  rating = 5
)

val movie1 = connector.getMovieByKey.execute(addMovieResult1.data.key)

println("Empire Strikes Back: ${movie1.data.movie}")

אפשר גם לאחזר כמה סרטים:

val connector = MoviesConnector.instance

val addMovieResult2 = connector.createMovie.execute(
  title="Attack of the Clones",
  releaseYear = 2002,
  genre = "Sci-Fi",
  rating = 5
)

val listMoviesResult = connector.listMoviesByGenre.execute(genre = "Sci-Fi")

println(listMoviesResult.data.movies)

אפשר גם לאסוף Flow שיניב תוצאה רק כשתוצאת שאילתה חדשה תוחזר באמצעות קריאה לשיטה execute() של השאילתה.

val connector = MoviesConnector.instance

connector.listMoviesByGenre.flow(genre = "Sci-Fi").collect { data ->
  println(data.movies)
}

connector.createMovie.execute(
  title="A New Hope",
  releaseYear = 1977,
  genre = "Sci-Fi",
  rating = 5
)

connector.listMoviesByGenre.execute(genre = "Sci-Fi") // will cause the Flow to get notified

יצירה ובדיקה של אב-טיפוס לאפליקציה ל-Android

הוספת רכיבים ללקוחות כדי להשתמש באמולטור מקומי

אפשר להשתמש במהדמ של Data Connect דרך התוסף של Data Connect ל-VS Code או דרך ה-CLI.

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

val connector = MoviesConnector.instance

// Connect to the emulator on "10.0.2.2:9399"
connector.dataConnect.useEmulator()

// (alternatively) if you're running your emulator on non-default port:
connector.dataConnect.useEmulator(port = 9999)

// Make calls from your app

כדי לעבור למשאבי הייצור, צריך להוסיף הערה לשורות שמקשרות למהדמ.

סוגי נתונים ב-SDK של Data Connect

השרת Data Connect מייצג סוגי נתונים נפוצים ומותאמים אישית של GraphQL. הם מיוצגים ב-SDK באופן הבא.

סוג Data Connect Kotlin
String String
Int Int‏ (32-bit)
Float כפול (float – 64 ביט)
בוליאני בוליאני
מזהה ייחודי אוניברסלי (UUID) java.util.UUID
תאריך java.util.Date
חותמת זמן com.google.firebase.Timestamp
Int64 ארוך
הכול com.google.firebase.dataconnect.AnyValue