แอปส่วนใหญ่ที่ผสานรวมกับ Health Connect จะมีพื้นที่เก็บข้อมูลของตัวเองซึ่ง เป็นแหล่งข้อมูลที่เชื่อถือได้ Health Connect มีวิธีทำให้แอป ซิงค์กัน
ตรวจสอบว่าแอปทำสิ่งต่อไปนี้
- ฟีดข้อมูลใหม่หรือข้อมูลที่อัปเดตจากพื้นที่เก็บข้อมูลของแอปไปยัง Health Connect
- ดึงการเปลี่ยนแปลงข้อมูลจาก Health Connect ซึ่งจะแสดงอยู่ใน พื้นที่เก็บข้อมูลของแอป
- ลบข้อมูลออกจาก Health Connect เมื่อลบในพื้นที่เก็บข้อมูลของแอป
ในแต่ละกรณี ให้ตรวจสอบว่าขั้นตอนการซิงค์เก็บทั้ง Health Connect และ ให้พื้นที่เก็บข้อมูลของแอปสอดคล้องกัน
ข้อมูลฟีดไปยัง Health Connect
ส่วนแรกของขั้นตอนการซิงค์คือฟีดข้อมูลจากพื้นที่เก็บข้อมูลของแอป ไปยังที่เก็บข้อมูล Health Connect
เตรียมข้อมูล
โดยปกติแล้ว บันทึกในพื้นที่เก็บข้อมูลของแอปจะมีรายละเอียดต่อไปนี้
- คีย์ที่ไม่ซ้ำกัน เช่น
UUID
- เวอร์ชันหรือการประทับเวลา
ออกแบบพื้นที่เก็บข้อมูลของแอปเพื่อติดตามข้อมูลที่มีการป้อนไว้แล้ว Health Connect เพื่อให้บรรลุเป้าหมายนี้ ให้ใช้ตรรกะต่อไปนี้
- ระบุรายการการเปลี่ยนแปลงและโทเค็นที่ใช้เรียกข้อมูลระเบียนได้ ที่มีการอัปเดตนับตั้งแต่ที่ออกโทเค็นล่าสุด
- ติดตามเวลาล่าสุดที่แก้ไขข้อมูลที่ส่งออก
ขั้นตอนเหล่านี้เป็นขั้นตอนสำคัญที่ช่วยให้มั่นใจได้ว่าระบบจะป้อนเฉพาะข้อมูลใหม่หรือข้อมูลที่อัปเดตเท่านั้น Health Connect
เขียนข้อมูลลงใน Health Connect
หากต้องการป้อนข้อมูลไปยัง Health Connect ให้ทำตามขั้นตอนต่อไปนี้
- รับรายการรายการใหม่หรือรายการที่อัปเดตจากพื้นที่เก็บข้อมูลของแอป
- สำหรับแต่ละรายการ ให้สร้างออบเจ็กต์
Record
ที่เหมาะกับประเภทข้อมูลนั้นๆ เช่น สร้างออบเจ็กต์WeightRecord
สำหรับข้อมูลที่เกี่ยวข้องกับน้ำหนัก ระบุออบเจ็กต์
Metadata
ด้วยRecord
แต่ละรายการโดยใช้คีย์ที่ไม่ซ้ำกันและ รายละเอียดเวอร์ชันจากพื้นที่เก็บข้อมูลของแอป หากข้อมูลยังไม่มีเวอร์ชัน คุณจะใช้ค่าLong
ของการประทับเวลาปัจจุบันแทนก็ได้val record = WeightRecord( metadata = Metadata( clientRecordId = "<Your record's Client ID>", clientRecordVersion = <Your record's version> ), weight = weight, time = time, zoneOffset = zoneOffset )
อัปเดตข้อมูลไปยัง Health Connect โดยใช้
insertRecords
การปรับปรุงข้อมูลหมายความว่า ระบบจะเขียนทับข้อมูลใน Health Connect ตราบใดที่clientRecordId
มีอยู่ในที่เก็บข้อมูล Health Connect และclientRecordVersion
สูงกว่าค่าที่มีอยู่เดิม ไม่เช่นนั้นระบบจะเขียนข้อมูลที่เพิ่มความถูกต้อง เป็นข้อมูลใหม่healthConnectClient.insertRecords(arrayListOf(record))
หากต้องการเรียนรู้เกี่ยวกับข้อควรพิจารณาที่ใช้ได้จริงในการป้อนข้อมูล โปรดดู แนวทางปฏิบัติสำหรับเขียนข้อมูล
จัดเก็บรหัส Health Connect
หลังจากเพิ่มระเบียนไปยัง Health Connect แล้ว พื้นที่เก็บข้อมูลของแอปจะต้อง
จัดเก็บ id
ของ Health Connect สำหรับแต่ละระเบียน วิธีนี้ช่วยให้แอปของคุณตรวจสอบ
หากการเปลี่ยนแปลงขาเข้าแต่ละรายการต้องมีการสร้างระเบียนใหม่ หรือ
อัปเดตระเบียนที่มีอยู่ หลังจากที่คุณดึงข้อมูล
ฟังก์ชัน insertRecords
จะแสดงผล
InsertRecordsResponse
ที่มีรายการค่า id
ค่า
ใช้คำตอบเพื่อดูรหัสระเบียนและจัดเก็บไว้
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
ดึงข้อมูลจาก Health Connect
ส่วนที่สองของกระบวนการซิงค์ คือการดึงการเปลี่ยนแปลงข้อมูลใดๆ จาก Health Connect กับพื้นที่เก็บข้อมูลของแอป การเปลี่ยนแปลงข้อมูลอาจรวมถึงการอัปเดตและ ลบ
รับโทเค็นการเปลี่ยนแปลง
แอปต้องเก็บให้ครบรายการการเปลี่ยนแปลงที่จะดึงข้อมูลจาก Health Connect ติดตามโทเค็นการเปลี่ยนแปลง ซึ่งคุณสามารถใช้เมื่อขอการเปลี่ยนแปลง แสดงผลทั้งรายการการเปลี่ยนแปลงข้อมูลและโทเค็นการเปลี่ยนแปลงใหม่ที่จะใช้เป็นลำดับถัดไป
หากต้องการรับโทเค็นการเปลี่ยนแปลง โปรดโทรหา getChangesToken
และ
ให้ข้อมูลที่จำเป็น
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
ตรวจสอบการเปลี่ยนแปลงข้อมูล
เมื่อคุณได้รับโทเค็นการเปลี่ยนแปลงแล้ว ให้ใช้โทเค็นเพื่อรับการเปลี่ยนแปลงทั้งหมด เราขอแนะนำให้สร้างการวนซ้ำเพื่อรับการเปลี่ยนแปลงทั้งหมดที่ตรวจสอบ ในกรณีที่มีการเปลี่ยนแปลงข้อมูล โดยทำตามขั้นตอนต่อไปนี้
- เรียกใช้
getChanges
โดยใช้โทเค็นเพื่อรับรายการ การเปลี่ยนแปลง - ตรวจสอบการเปลี่ยนแปลงแต่ละรายการว่าประเภทการเปลี่ยนแปลงเป็น
UpsertionChange
หรือDeletionChange
และ ดำเนินการที่จำเป็น- สำหรับ
UpsertionChange
รับเฉพาะการเปลี่ยนแปลงที่ไม่ได้มาจาก เพื่อตรวจสอบว่าคุณไม่ได้นำเข้าข้อมูลซ้ำ
- สำหรับ
- กำหนดโทเค็นการเปลี่ยนแปลงถัดไปเป็นโทเค็นใหม่
- ทำซ้ำขั้นตอนที่ 1-3 จนกว่าจะไม่มีการเปลี่ยนแปลงเหลืออยู่
- จัดเก็บโทเค็นถัดไปและจองเพื่อการนำเข้าในอนาคต
suspend fun processChanges(token: String): String {
var nextChangesToken = token
do {
val response = healthConnectClient.getChanges(nextChangesToken)
response.changes.forEach { change ->
when (change) {
is UpsertionChange ->
if (change.record.metadata.dataOrigin.packageName != context.packageName) {
processUpsertionChange(change)
}
is DeletionChange -> processDeletionChange(change)
}
}
nextChangesToken = response.nextChangesToken
} while (response.hasMore)
// Return and store the changes token for use next time.
return nextChangesToken
}
หากต้องการเรียนรู้เกี่ยวกับข้อควรพิจารณาที่ใช้ได้จริงในการดึงข้อมูล โปรดดู แนวทางปฏิบัติสำหรับซิงค์ข้อมูล
ประมวลผลการเปลี่ยนแปลงข้อมูล
แสดงการเปลี่ยนแปลงในพื้นที่เก็บข้อมูลของแอป สำหรับ UpsertionChange
ให้ใช้ id
และ lastModifiedTime
จาก metadata
เพื่ออัปเดตระเบียน
สำหรับ DeletionChange
ให้ใช้ id
ที่ให้ไว้เพื่อลบระเบียน
ลบข้อมูลออกจาก Health Connect
เมื่อผู้ใช้ลบข้อมูลของตนเองออกจากแอป ให้ตรวจสอบให้แน่ใจว่าข้อมูลดังกล่าว
ถูกนำออกจาก Health Connect แล้ว ใช้ deleteRecords
ได้ การดำเนินการนี้จะใช้ประเภทระเบียนและรายการ id
และ clientRecordId
ซึ่งทำให้ง่ายต่อการจัดกลุ่มข้อมูลหลายรายการเพื่อการลบ CANNOT TRANSLATE
deleteRecords
สำรองที่ใช้ timeRangeFilter
พร้อมให้บริการแล้ว
แนวทางปฏิบัติแนะนำสำหรับการซิงค์ข้อมูล
ปัจจัยต่อไปนี้ส่งผลต่อกระบวนการซิงค์
การหมดอายุของโทเค็น
คุณต้องใช้การซิงค์ เนื่องจากโทเค็น Changes ที่ไม่ได้ใช้จะหมดอายุภายใน 30 วัน ที่จะหลีกเลี่ยงการสูญเสียข้อมูลในกรณีดังกล่าว กลยุทธ์ของคุณอาจมีประโยชน์ ประกอบด้วยวิธีการต่อไปนี้
- ค้นหาพื้นที่เก็บข้อมูลแอปเพื่อดูระเบียนที่ใช้งานล่าสุดซึ่ง
มี
id
จาก Health Connect - ขอบันทึกจาก Health Connect ที่ขึ้นต้นด้วย การประทับเวลา แล้วแทรกหรืออัปเดตในพื้นที่เก็บข้อมูลของแอป
- ขอโทเค็นการเปลี่ยนแปลงเพื่อสงวนไว้ใช้ครั้งถัดไปที่จำเป็น
กลยุทธ์การจัดการการเปลี่ยนแปลงที่แนะนำ
ในกรณีที่แอปได้รับโทเค็นการเปลี่ยนแปลงที่ไม่ถูกต้องหรือหมดอายุ เราขอแนะนำกลยุทธ์การจัดการต่อไปนี้โดยขึ้นอยู่กับการนำไปใช้ใน ตรรกะของคุณ:
- อ่านและกรองข้อมูลทั้งหมดที่ซ้ำกันออก นี่คือกลยุทธ์ที่เหมาะสมที่สุด
- จัดเก็บการประทับเวลาครั้งล่าสุดที่บุคคลนั้นอ่านข้อมูลจาก Health Connect
- เมื่อโทเค็นหมดอายุ ให้อ่านข้อมูลทั้งหมดจากการประทับเวลาล่าสุดอีกครั้ง หรือสำหรับ 30 วันที่ผ่านมา จากนั้นทำซ้ำข้อมูลกับข้อมูลที่เคยอ่านแล้วโดยใช้ บางอย่าง
- โดยหลักการแล้ว ให้ติดตั้งใช้งาน Client-ID เนื่องจากจำเป็นสำหรับการอัปเดตข้อมูล
- เฉพาะข้อมูลที่อ่านนับตั้งแต่การประทับเวลาที่อ่านล่าสุด ซึ่งส่งผลให้ข้อมูลบางอย่าง
ความคลาดเคลื่อนในช่วงเวลาที่โทเค็นการเปลี่ยนแปลงหมดอายุ แต่ระยะเวลา
จะสั้นลง ซึ่งอาจใช้เวลา 2-3 ชั่วโมงไปจนถึง 2-3 วัน
- จัดเก็บการประทับเวลาครั้งล่าสุดที่บุคคลนั้นอ่านข้อมูลจาก Health Connect
- เมื่อโทเค็นหมดอายุ ให้อ่านข้อมูลทั้งหมดตั้งแต่การประทับเวลานี้เป็นต้นไป
- ลบข้อมูลที่อ่านแล้วในช่วง 30 วันที่ผ่านมา การดำเนินการนี้จะสอดคล้องกันมากขึ้น
กับสิ่งที่เกิดขึ้นในการผสานรวมครั้งแรก
- ลบข้อมูลทั้งหมดที่แอปอ่านออกจาก Health Connect ในช่วง 30 วันที่ผ่านมา วัน
- เมื่อลบแล้ว ให้อ่านข้อมูลทั้งหมดอีกครั้ง
- อ่านข้อมูลในช่วง 30 วันที่ผ่านมาโดยไม่กรองข้อมูลที่ซ้ำกันออก ตัวเลือกนี้เหมาะสมน้อยที่สุด
และส่งผลให้มีการแสดงข้อมูลที่ซ้ำกันต่อผู้ใช้
- ลบข้อมูลทั้งหมดที่แอปอ่านออกจาก Health Connect สำหรับ 30 วันล่าสุด
- อนุญาตให้ป้อนข้อมูลซ้ำ
โทเค็นการเปลี่ยนประเภทข้อมูล
หากแอปใช้ข้อมูลมากกว่า 1 ประเภทแยกกัน ให้ใช้ "การเปลี่ยนแปลง" แยกกัน โทเค็นสำหรับข้อมูลแต่ละประเภท ใช้เฉพาะรายการประเภทข้อมูลหลายประเภทที่มี เปลี่ยน Sync API หากมีการใช้งานข้อมูลประเภทเหล่านี้ร่วมกันหรือไม่ใช้เลย
การอ่านเบื้องหน้า
แอปจะอ่านข้อมูลจาก Health Connect ได้เฉพาะเมื่อทำงานอยู่ในเบื้องหน้าเท่านั้น เมื่อซิงค์ข้อมูลจาก Health Connect ระบบอาจเข้าถึง Health Connect ขัดจังหวะได้ทุกเมื่อ เช่น แอปของคุณต้องรับมือกับการขัดจังหวะ ขณะกำลังอ่านข้อมูลจำนวนมากจาก Health Connect และดำเนินการต่อเมื่อเปิดแอปในครั้งถัดไป
เวลาการนำเข้า
เนื่องจากแอปจะไม่ได้รับการแจ้งเตือนเกี่ยวกับข้อมูลใหม่ โปรดตรวจสอบข้อมูลใหม่ได้ที่ 2 จุดต่อไปนี้
- ทุกครั้งที่แอปทำงานในเบื้องหน้า ในกรณีนี้ ให้ใช้ ในวงจร
- เป็นระยะๆ ขณะแอปอยู่เบื้องหน้า แจ้งผู้ใช้เมื่อ มีข้อมูลใหม่ให้ใช้งาน จึงอัปเดตหน้าจอให้ตรงตาม การเปลี่ยนแปลง