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

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

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

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

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

מהו תהליך העבודה לפיתוח לקוחות?

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

לסיכום, כדי להשתמש ב-Android SDK שנוצר באפליקציות הלקוח, צריך לבצע את השלבים המקדימים הבאים:

  1. מוסיפים את Firebase לאפליקציית Android.
  2. מגדירים את Data Connect כתלות ב-Gradle.
  3. מוסיפים את הפלאגין Kotlin Serialization Gradle ואת התלות Gradle.

לאחר מכן:

  1. פיתוח סכימת האפליקציה.
  2. הגדרת יצירת SDK:

  3. מאתחלים את קוד הלקוח ומייבאים ספריות.

  4. הטמעה של קריאות לשאילתות ולמוטציות.

  5. מגדירים את האמולטור Data Connect ומשתמשים בו וחוזרים על התהליך.

יצירת Kotlin SDK

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

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

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

ב-connector.yaml, מוסיפים את outputDir, package ואת (עבור ה-SDK לאינטרנט) packageJsonDir.
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, אפשר להפעיל את Firebase CLI לעדכון אצווה.

במקרים כאלה, צריך להשתמש ב-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(platform("com.google.firebase:firebase-bom:33.16.0"))
implementation("com.google.firebase:firebase-dataconnect")
implementation("com.google.firebase:firebase-auth") // Optional
implementation("com.google.firebase:firebase-appcheck") // Optional
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") // Newer versions should work too
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") // Newer versions should work too

אתחול של Data Connect Android SDK

מאתחלים את מופע 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

שימוש בשאילתות ובמוטציות מ-Android SDK

באמצעות אובייקט המחבר, אפשר להריץ שאילתות ומוטציות כמו שהוגדר בקוד המקור של 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

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

סוגי נתונים בערכות Data Connect SDK

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

סוג Data Connect Kotlin
מחרוזת מחרוזת
Int ‫Int (מספר שלם ב-32 ביט)
Float ‫Double (מספר ממשי (float) ב-64 ביט)
בוליאני בוליאני
מזהה ייחודי אוניברסלי (UUID) java.util.UUID
תאריך ‪com.google.firebase.dataconnect.LocalDate (was java.util.Date until 16.0.0-beta03)
חותמת זמן com.google.firebase.Timestamp
Int64 ארוך
הכול com.google.firebase.dataconnect.AnyValue