Firebase Data Connect SDK ของไคลเอ็นต์ช่วยให้คุณเรียกใช้การค้นหาและการเปลี่ยนแปลงฝั่งเซิร์ฟเวอร์ได้โดยตรงจากแอป Firebase คุณสร้าง SDK ของไคลเอ็นต์ที่กำหนดเองแบบขนานไปพร้อมกับการออกแบบสคีมา การค้นหา และการเปลี่ยนแปลงที่คุณนําไปใช้กับบริการ Data Connect จากนั้นผสานรวมเมธอดจาก SDK นี้เข้ากับตรรกะไคลเอ็นต์
ดังที่เราได้กล่าวไว้ในที่อื่นๆ สิ่งสำคัญที่ควรทราบคือData Connect โค้ดฝั่งไคลเอ็นต์ไม่ได้ส่งการค้นหาและการเปลี่ยนแปลง และไม่ได้ดำเนินการบนเซิร์ฟเวอร์ แต่เมื่อมีการใช้งาน ระบบจะจัดเก็บการดำเนินการ Data Connect ไว้ในเซิร์ฟเวอร์ เช่น Cloud Functions ซึ่งหมายความว่าคุณต้องติดตั้งใช้งานการเปลี่ยนแปลงฝั่งไคลเอ็นต์ที่เกี่ยวข้องเพื่อหลีกเลี่ยงไม่ให้ผู้ใช้เดิมใช้งานไม่ได้ (เช่น ในแอปเวอร์ชันเก่า)
ด้วยเหตุนี้ Data Connect จึงมีสภาพแวดล้อมสำหรับนักพัฒนาแอปและเครื่องมือที่ช่วยให้คุณสร้างต้นแบบของสคีมา คำค้นหา และการเปลี่ยนแปลงที่ใช้งานในเซิร์ฟเวอร์ได้ นอกจากนี้ยังสร้าง SDK ฝั่งไคลเอ็นต์โดยอัตโนมัติขณะที่คุณสร้างต้นแบบ
เมื่ออัปเดตบริการและแอปไคลเอ็นต์ซ้ำแล้ว การอัปเดตทั้งฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ก็พร้อมใช้งาน
เวิร์กโฟลว์การพัฒนาไคลเอ็นต์คืออะไร
หากทำตามเริ่มต้นใช้งาน คุณจะได้รับข้อมูลเกี่ยวกับขั้นตอนการพัฒนาโดยรวมสำหรับ Data Connect ในคำแนะนำนี้ คุณจะเห็นข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการสร้าง Android SDK จากสคีมาของคุณ รวมถึงการทำงานกับการค้นหาและการเปลี่ยนแปลงของไคลเอ็นต์
โดยสรุป หากต้องการใช้ Android SDK ที่สร้างขึ้นในแอปไคลเอ็นต์ คุณจะต้องทำตามขั้นตอนเบื้องต้นต่อไปนี้
- เพิ่ม Firebase ไปยังแอป Android
- กำหนดค่า Data Connect เป็นทรัพยากร Dependency ใน Gradle
- เพิ่มปลั๊กอิน Kotlin Serialization Gradle และทรัพยากร Dependency Gradle
จากนั้นให้ทำดังนี้
- พัฒนาสคีมาแอป
ตั้งค่าการสร้าง SDK โดยทำดังนี้
- ด้วยปุ่มเพิ่ม SDK ลงในแอปในส่วนขยาย Data Connect VS Code
- โดยอัปเดต
connector.yaml
ตั้งค่าและใช้Data Connectโปรแกรมจำลอง แล้ว ทำซ้ำ
สร้าง Kotlin SDK
ใช้ Firebase CLI เพื่อตั้งค่า Data Connect SDK ที่สร้างขึ้นในแอป
คำสั่ง init
ควรตรวจหาแอปทั้งหมดในโฟลเดอร์ปัจจุบันและติดตั้ง SDK ที่สร้างขึ้นโดยอัตโนมัติ
firebase init dataconnect:sdk
อัปเดต SDK ขณะสร้างต้นแบบ
หากคุณติดตั้งส่วนขยาย Data Connect VS Code ไว้ ระบบจะอัปเดต SDK ที่สร้างขึ้นให้เป็นเวอร์ชันล่าสุดอยู่เสมอ
หากไม่ได้ใช้ส่วนขยาย Data Connect VS Code คุณสามารถใช้ Firebase CLI เพื่อให้ SDK ที่สร้างขึ้นเป็นเวอร์ชันล่าสุดอยู่เสมอ
firebase dataconnect:sdk:generate --watch
สร้าง SDK ในไปป์ไลน์การสร้าง
คุณใช้ Firebase CLI เพื่อสร้าง SDK การเชื่อมต่อข้อมูลในกระบวนการสร้าง CI/CD ได้
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:34.2.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 (ทั้งหมดอยู่ในคอนโซล Firebase แท็บ Data Connect)
ออบเจ็กต์ 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
จัดการการเปลี่ยนแปลงฟิลด์การแจงนับ
สคีมาของแอปสามารถมีการแจงนับ ซึ่งการค้นหา GraphQL จะเข้าถึงได้
เมื่อการออกแบบแอปมีการเปลี่ยนแปลง คุณอาจเพิ่มค่าใหม่ที่รองรับ enum ตัวอย่างเช่น
สมมติว่าในภายหลังวงจรแอปพลิเคชัน คุณตัดสินใจที่จะเพิ่มค่า
FULLSCREEN ลงใน AspectRatio
enum
ในเวิร์กโฟลว์ Data Connect คุณสามารถใช้เครื่องมือการพัฒนาในเครื่องเพื่อ อัปเดตการค้นหาและ SDK ได้
อย่างไรก็ตาม ก่อนที่จะเผยแพร่ไคลเอ็นต์เวอร์ชันที่อัปเดตแล้ว ไคลเอ็นต์เวอร์ชันเก่าที่ติดตั้งใช้งาน อาจใช้งานไม่ได้
ตัวอย่างการใช้งานที่ยืดหยุ่น
SDK ที่สร้างขึ้นบังคับให้จัดการค่าที่ไม่รู้จักเนื่องจากโค้ดของลูกค้าต้อง
แกะออบเจ็กต์ EnumValue
ซึ่งอาจเป็น EnumValue.Known
สำหรับค่า Enum ที่รู้จัก
หรือ EnumValue.Unknown
สำหรับค่าที่ไม่รู้จัก
val result = connector.listMoviesByAspectRatio.execute(AspectRatio.WIDESCREEN)
val encounteredAspectRatios = mutableSetOf<String>()
result.data.movies
.mapNotNull { it.otherAspectRatios }
.forEach { otherAspectRatios ->
otherAspectRatios
.filterNot { it.value == AspectRatio.WIDESCREEN }
.forEach {
when (it) {
is EnumValue.Known -> encounteredAspectRatios.add(it.value.name)
is EnumValue.Unknown ->
encounteredAspectRatios.add("[unknown ratio: ${it.stringValue}]")
}
}
}
println(
"Widescreen movies also include additional aspect ratios: " +
encounteredAspectRatios.sorted().joinToString()
)
สร้างต้นแบบและทดสอบแอปพลิเคชัน Android
กำหนดค่าไคลเอ็นต์ให้ใช้โปรแกรมจำลองในเครื่อง
คุณสามารถใช้Data Connectโปรแกรมจำลองได้ ไม่ว่าจะจากส่วนขยาย Data Connect VS Code หรือจาก CLI
การวัดประสิทธิภาพแอปเพื่อเชื่อมต่อกับโปรแกรมจำลองจะเหมือนกันสำหรับทั้ง 2 สถานการณ์
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 ดังนี้
ประเภทการเชื่อมต่อข้อมูล | Kotlin |
---|---|
สตริง | สตริง |
Int | Int (จำนวนเต็ม 32 บิต) |
ทศนิยม | Double (ทศนิยม 64 บิต) |
บูลีน | บูลีน |
UUID | java.util.UUID |
วันที่ | com.google.firebase.dataconnect.LocalDate (เดิมคือ java.util.Date จนถึง 16.0.0-beta03) |
การประทับเวลา | com.google.firebase.Timestamp |
Int64 | ยาว |
เวลาใดก็ได้ | com.google.firebase.dataconnect.AnyValue |