ซิงค์ข้อมูล

แอปส่วนใหญ่ที่ผสานรวมกับ 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 ให้ทำตามขั้นตอนต่อไปนี้

  1. รับรายการรายการใหม่หรือรายการที่อัปเดตจากพื้นที่เก็บข้อมูลของแอป
  2. สำหรับแต่ละรายการ ให้สร้างออบเจ็กต์ Record ที่เหมาะกับประเภทข้อมูลนั้นๆ เช่น สร้างออบเจ็กต์ WeightRecord สำหรับข้อมูลที่เกี่ยวข้องกับน้ำหนัก
  3. ระบุออบเจ็กต์ 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
    )
    
  4. อัปเดตข้อมูลไปยัง 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))
)

ตรวจสอบการเปลี่ยนแปลงข้อมูล

เมื่อคุณได้รับโทเค็นการเปลี่ยนแปลงแล้ว ให้ใช้โทเค็นเพื่อรับการเปลี่ยนแปลงทั้งหมด เราขอแนะนำให้สร้างการวนซ้ำเพื่อรับการเปลี่ยนแปลงทั้งหมดที่ตรวจสอบ ในกรณีที่มีการเปลี่ยนแปลงข้อมูล โดยทำตามขั้นตอนต่อไปนี้

  1. เรียกใช้ getChanges โดยใช้โทเค็นเพื่อรับรายการ การเปลี่ยนแปลง
  2. ตรวจสอบการเปลี่ยนแปลงแต่ละรายการว่าประเภทการเปลี่ยนแปลงเป็น UpsertionChange หรือ DeletionChange และ ดำเนินการที่จำเป็น
    • สำหรับ UpsertionChange รับเฉพาะการเปลี่ยนแปลงที่ไม่ได้มาจาก เพื่อตรวจสอบว่าคุณไม่ได้นำเข้าข้อมูลซ้ำ
  3. กำหนดโทเค็นการเปลี่ยนแปลงถัดไปเป็นโทเค็นใหม่
  4. ทำซ้ำขั้นตอนที่ 1-3 จนกว่าจะไม่มีการเปลี่ยนแปลงเหลืออยู่
  5. จัดเก็บโทเค็นถัดไปและจองเพื่อการนำเข้าในอนาคต
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 จุดต่อไปนี้

  • ทุกครั้งที่แอปทำงานในเบื้องหน้า ในกรณีนี้ ให้ใช้ ในวงจร
  • เป็นระยะๆ ขณะแอปอยู่เบื้องหน้า แจ้งผู้ใช้เมื่อ มีข้อมูลใหม่ให้ใช้งาน จึงอัปเดตหน้าจอให้ตรงตาม การเปลี่ยนแปลง