Health Connect จะมาพร้อมกับ Android 14 ในรูปแบบเลเยอร์พื้นที่เก็บข้อมูลทั่วไป สำหรับข้อมูลสุขภาพและการออกกำลังกายของผู้บริโภค โดยจะได้รับการปกป้องด้วยสิทธิ์แบบละเอียดและ เข้าถึงได้ในรูปแบบแอปของระบบ Android (เรียกในเอกสารนี้ว่าโมดูล "เฟรมเวิร์ก")
นักพัฒนาแอปควรพิจารณา APK ของ Health Connect (Android 13) เป็นเลเยอร์ความเข้ากันได้แบบย้อนหลัง สำหรับโมเดลเฟรมเวิร์ก โมเดลเฟรมเวิร์กจะยังคง ความเท่าเทียมของฟีเจอร์ 100% กับ APK รุ่นก่อน
ในระหว่างการเปลี่ยนจาก Android 13 เป็น 14 สิ่งสำคัญอย่างยิ่งคือ ประสบการณ์ของผู้ใช้ยังคงราบรื่นและใช้งานง่ายที่สุด
เอกสารนี้จะอธิบายแผนการย้ายข้อมูล แสดงตัวอย่างสถานการณ์การย้ายข้อมูลบางส่วน และแสดงรายการการเปลี่ยนแปลงใน Jetpack SDK ซึ่งช่วยให้เข้าถึง Health Connect API ได้ง่ายขึ้น
แผนการย้ายข้อมูล
- เมื่อ Android 14 เปิดตัวแล้ว Google จะเปลี่ยนไปให้บริการ Health Connect เป็นแอประบบ Android
- จากนั้นระบบจะป้อนข้อมูลย้อนหลังจาก APK เมื่อฟีเจอร์มีความเท่าเทียมกัน
- จุดแรกเข้าทั้งหมดจะกำหนดเป้าหมายไปยัง UI ของแอประบบ
- การย้ายข้อมูลจะเริ่มขึ้น ในระหว่างการย้ายข้อมูล ระบบจะระงับ API ของโมดูลโดยมีสถานะเป็น "อยู่ระหว่างการย้ายข้อมูล" ซึ่งจะปรากฏใน UI ของ Health Connect ด้วย
- เมื่อย้ายข้อมูลเสร็จสมบูรณ์แล้ว คุณจะถอนการติดตั้ง APK ได้
ตัวอย่างสถานการณ์การย้ายข้อมูล
ต่อไปนี้คือสถานการณ์ตัวอย่างที่อธิบายกระบวนการย้ายข้อมูลสำหรับข้อมูลประเภท interval
และ series
ตัวอย่างที่ 1 - การวิ่ง (ข้อมูลช่วง)
ผู้ใช้ได้รวบรวมบันทึกการวิ่งเป็นเวลา 10 ปี โดยวิ่ง 1 ชั่วโมงทุกวัน ซึ่งเทียบเท่ากับสิ่งต่อไปนี้
- บันทึกเซสชันการออกกำลังกาย: 365 * 10 * 1
- ขั้นตอน: 365 * 10 * 1
- แคลอรี่: 365 * 10 * 1
- รวม = 365 * 10 * 3 (365 * 30) = 10,950
เนื่องจาก 1 ก้อนเท่ากับ 3,000 เรคคอร์ด ข้อมูลจึงมีทั้งหมดประมาณ 4 ก้อน
การทดสอบภายในของเรายืนยันว่าโดยทั่วไปแล้ว การแทรกแต่ละก้อนจะใช้เวลาประมาณ 1 วินาที ดังนั้นการย้ายข้อมูลในตัวอย่างจะใช้เวลาประมาณ 4 วินาที
ตัวอย่างที่ 2 - อัตราการเต้นของหัวใจ (ข้อมูลอนุกรม)
ผู้ใช้ได้รวบรวมข้อมูลอัตราการเต้นของหัวใจเป็นเวลา 5 ปี (โดยมีการสร้างบันทึกทุกนาที) ซึ่งมีบันทึกทั้งหมด 2,628,000 รายการ
เมื่อมี 3,000 ระเบียนต่อก้อน ข้อมูลจะกระจายไปทั่ว 876 ก้อน เนื่องจากแต่ละก้อนใช้เวลาประมาณ 1 วินาทีในการแทรก ข้อมูลจึงจะย้ายข้อมูลเสร็จภายใน 15 นาที
ขั้นตอนการย้ายข้อมูลที่เสนอ
เราตัดสินใจเลือกการย้ายข้อมูลทันที ในทางปฏิบัติ การดำเนินการนี้หมายความว่า APK จะไม่ทำงานทันทีที่อุปกรณ์ได้รับการอัปเกรดเป็น Android 14 โดยที่ผู้ใช้แทบไม่ต้องดำเนินการใดๆ
ขั้นตอนการย้ายข้อมูลระดับสูงมีดังนี้
- ผู้ใช้อัปเกรดอุปกรณ์เป็น Android 14
- Jetpack 14 จะกำหนดเส้นทางผู้ใช้ไปยัง API ของโมดูล และบล็อกผู้ใช้ในขณะที่ การย้ายข้อมูลกำลังดำเนินการอยู่
- กระบวนการย้ายข้อมูลจะเริ่มต้นเมื่อเวอร์ชันโมดูลเข้ากันได้กับฟีเจอร์ของ APK
กล่าวคือ เวอร์ชันโมดูลมีชุดฟีเจอร์เดียวกัน
หรือมากกว่า เมื่อกระบวนการย้ายข้อมูลเริ่มต้นขึ้น APK จะย้ายสิทธิ์
และข้อมูล
- หากทั้ง 2 เวอร์ชันใช้ฟีเจอร์ร่วมกันไม่ได้ คุณจะต้องอัปเกรดเวอร์ชันของโมดูล เมื่อการอัปเกรดเสร็จสมบูรณ์แล้ว กระบวนการย้ายข้อมูล จะเริ่มต้นขึ้น
- เมื่อการย้ายข้อมูลเสร็จสมบูรณ์แล้ว สถานะจะเปลี่ยนเป็น "ย้ายข้อมูล เสร็จสมบูรณ์" และระบบจะเลิกบล็อก API ของโมดูล
- ตอนนี้คุณถอนการติดตั้ง APK ได้แล้ว
องค์ประกอบ UI ของการย้ายข้อมูล
โมดูลเฟรมเวิร์กจะแสดงหน้าจอต่อไปนี้เพื่อวัตถุประสงค์ในการให้ความรู้แก่ผู้ใช้ทั้งก่อนและระหว่างการย้ายข้อมูล
รูปที่ 1 หาก APK ของ Health Connect ไม่ "ทราบการย้ายข้อมูล" ระบบจะแสดงข้อความแจ้ง ที่แนะนำให้ผู้ใช้อัปเดต APK หากผู้ใช้ปฏิเสธการ อัปเดต โมดูลจะยังคงทำงานต่อไปและเริ่มสะสมสิทธิ์ และข้อมูล

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

รูปที่ 3 โดยจะแสดงวงกลมหมุนในระหว่างกระบวนการย้ายข้อมูล พร้อมข้อความที่อธิบายว่าระบบกำลังซิงค์ข้อมูล

ข้อมูลที่ซ้ำกัน
หากโมดูลเฟรมเวิร์กเริ่มรับข้อมูลและสิทธิ์ ก่อนที่จะมีการย้ายข้อมูลหรือการกู้คืนจากระบบคลาวด์ กฎต่อไปนี้ จะมีผล
สิทธิ์
หากมีสิทธิ์ภายในโมดูลเฟรมเวิร์ก ระบบจะไม่สนใจสิทธิ์ที่ซ้ำกันซึ่งได้จาก APK ในระหว่างกระบวนการย้ายข้อมูล
ข้อมูล
ในระหว่างการย้ายข้อมูล ระบบจะไม่สนใจข้อมูลที่ซ้ำกันซึ่งมาจาก APK ระบบจะให้ความสำคัญกับข้อมูลล่าสุดจากโมดูล
ระบบจะขจัดข้อมูลที่ซ้ำกันใน clientRecordId
หากไคลเอ็นต์ระบุรหัสระเบียน
หากไม่ใช่ ระบบจะถือว่าช่วงเวลา (startTime
และ endTime
สำหรับบันทึกภายใน
และ time
สำหรับบันทึกทันที) เป็นคีย์ พร้อมกับประเภทข้อมูล
และชื่อแพ็กเกจของแอป
การเปลี่ยนแปลงใน Jetpack SDK
Jetpack SDK ทำหน้าที่เป็นจุดผสานรวมทั่วไปสำหรับทั้ง APK ของ Health Connect และ API ของเฟรมเวิร์ก Health Connect
OEM สามารถเริ่มผสานรวมกับ Jetpack 13 เพื่อให้เมื่อ Jetpack 14 พร้อมใช้งาน คุณจะใช้ไลบรารีใหม่และคอมไพล์ภายใน Android 14 ได้
เราจะเปิดตัว SDK เวอร์ชันใหม่ที่รองรับการเปลี่ยนไปใช้ Android 14 คุณจะต้องทำการเปลี่ยนแปลงการผสานรวมที่มีอยู่เพื่อให้การเปลี่ยนเป็นไปอย่างราบรื่น
การประกาศสิทธิ์
ใน Android 13 คุณจะประกาศสิทธิ์โดยใช้รูปแบบสิทธิ์ที่กำหนดเองในไฟล์ทรัพยากรที่ลิงก์กับไฟล์ Manifest ดังนี้
#AndroidManifest.xml
<activity>
android:name=".RationaleActivity"
android:exported="true">
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE"/>
</intent-filter>
<meta-data
android:name="health_permissions"
android:resource="@array/health_permissions"/>
</activity>
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
#health_permissions.xml
<resources>
<array name="health_permissions">
<item>androidx.health.permission.SleepSession.READ</item>
<item>androidx.health.permission.SleepStage.READ</item>
<item>androidx.health.permission.Weight.READ</item>
<item>androidx.health.permission.Weight.WRITE</item>
</array>
</resources>
นักพัฒนาแอปต้องเปลี่ยนไปใช้รูปแบบสิทธิ์มาตรฐานเพื่อรองรับ Android 14 ดังนี้
#AndroidManifest.xml
<uses-permission android:name=”android.permission.health.READ_SLEEP” />
<uses-permission android:name=”android.permission.health.READ_WEIGHT” />
<uses-permission android:name=”android.permission.health.WRITE_WEIGHT” />
<activity>
android:name=".RationaleActivity"
android:exported="true">
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
</activity>
<queries>
<package android:name="com.google.android.apps.healthdata"/>
</queries>
เปิด Health Connect
แอปของบุคคลที่สามส่วนใหญ่จะมีปุ่มที่เปิดแอป Health Connect เช่น ปุ่ม "จัดการการเข้าถึง" ใน Fitbit
ใน Android 13 คุณจะเปิดแอป Health Connect โดยใช้ชื่อแพ็กเกจหรือ
ผ่านandroidx.health.ACTION_HEALTH_CONNECT_SETTINGS
การดำเนินการก็ได้
ใน Android 14 คุณต้องใช้การดำเนินการ Intent ที่ระบุใน Jetpack SDK ซึ่งมีค่าแตกต่างกันตามเวอร์ชัน Android ที่ดำเนินการ
@get:JvmName("getHealthConnectSettingsAction")
@JvmStatic val
ACTION_HEALTH_CONNECT_SETTINGS
การรับไคลเอ็นต์ Health Connect
เราได้สร้าง API เดียวชื่อ sdkStatus
ซึ่งพร้อมใช้งานใน Jetpack 11 เพื่อ
แทนที่ API อื่นๆ 2 รายการที่เลิกใช้งานแล้ว ได้แก่ IsSdkSupported()
และ
isProviderAvailable()
การเปลี่ยนแปลง API บันทึกเซสชัน
เราได้ลบExerciseSession
ประเภทย่อย 4 รายการซึ่งเป็นส่วนหนึ่งของรุ่นอัลฟ่า 10
ดังนี้
ExerciseEvent
ExerciseLaps
ExerciseRepetitions
SwimmingStrokes
เช่นเดียวกับ ExerciseSessionRecord
SleepStage
จะกลายเป็นประเภทย่อยของ
SleepSession
ทั้งการเปลี่ยนแปลงExerciseSessionRecord
ประเภทSleepSession
ย่อยจะ
เปิดตัวเป็นส่วนหนึ่งของการอัปเดต SDK ในเดือนเมษายน
การอัปเดตประเภทเซสชันการออกกำลังกาย
ระบบจะไม่รองรับเซสชันการออกกำลังกายประเภทต่อไปนี้อีกต่อไป และจะเพิ่มเป็นประเภทเซสชันในภายหลังแทน
EXERCISE_TYPE_BACK_EXTENSION
EXERCISE_TYPE_BARBELL_SHOULDER_PRESS
EXERCISE_TYPE_BENCH_PRESS
EXERCISE_TYPE_BENCH_SIT_UP
EXERCISE_TYPE_BURPEE
EXERCISE_TYPE_CRUNCH
EXERCISE_TYPE_DEADLIFT
EXERCISE_TYPE_DUMBBELL_CURL_LEFT_ARM
EXERCISE_TYPE_DUMBBELL_CURL_RIGHT_ARM
EXERCISE_TYPE_DUMBBELL_FRONT_RAISE
EXERCISE_TYPE_DUMBBELL_LATERAL_RAISE
EXERCISE_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM
EXERCISE_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM
EXERCISE_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM
EXERCISE_TYPE_FORWARD_TWIST
EXERCISE_TYPE_JUMPING_JACK
EXERCISE_TYPE_JUMP_ROPE
EXERCISE_TYPE_LAT_PULL_DOWN
EXERCISE_TYPE_LUNGE
EXERCISE_TYPE_PLANK
EXERCISE_TYPE_SQUAT
EXERCISE_TYPE_UPPER_TWIST
ประเภทการแทนที่
EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
EXERCISE_TYPE_STRENGTH_TRAINING
EXERCISE_TYPE_CALISTHENICS
การจัดการบันทึกการเปลี่ยนแปลง
ระบบจะไม่ย้ายข้อมูลบันทึกการเปลี่ยนแปลงเมื่อเปลี่ยนจาก APK เป็น Android 14
หลังจากย้ายข้อมูลเสร็จสมบูรณ์แล้ว คุณจะเริ่มได้รับข้อยกเว้น TOKEN_EXPIRED
หรือ TOKEN_INVALID
โดยควรจัดการในลักษณะต่อไปนี้ (ตามลำดับความสำคัญ)
1. อ่านและขจัดข้อมูลที่ซ้ำกันทั้งหมดตั้งแต่การประทับเวลา "อ่านล่าสุด" หรือในช่วง 30 วันที่ผ่านมา
จัดเก็บการประทับเวลาเมื่อแอปอ่านข้อมูลจาก Health Connect ครั้งล่าสุด เมื่อโทเค็นหมดอายุ คุณควรอ่านข้อมูลอีกครั้งจากค่านี้หรือจาก 30 วันที่ผ่านมา (แล้วแต่ว่าค่าใดจะเท่ากับค่าต่ำสุด) และขจัดข้อมูลที่ซ้ำกันกับข้อมูลที่อ่านก่อนหน้านี้โดยใช้ UUID
2. อ่านข้อมูลตั้งแต่การประทับเวลา "อ่านล่าสุด"
สร้างการประทับเวลาที่ระบุเวลาที่อ่านข้อมูลล่าสุดจาก Health Connect และเมื่อโทเค็นหมดอายุ ให้อ่านข้อมูลทั้งหมดหลังจากค่าดังกล่าว
3. ลบและอ่านข้อมูลในช่วง 30 วันที่ผ่านมาอีกครั้ง
ลบข้อมูลทั้งหมดที่อ่านจาก Health Connect ในช่วง 30 วันที่ผ่านมา และอ่านข้อมูลทั้งหมดนั้นอีกครั้ง (เช่นเดียวกับที่ทำเมื่อแอปผสานรวมกับ Health Connect เป็นครั้งแรก)
4. ไม่ต้องทำอะไร (เช่น อ่านข้อมูลอีกครั้งในช่วง 30 วันที่ผ่านมาและไม่หักล้างข้อมูลที่ซ้ำกัน)
ควรใช้เป็นทางเลือกสุดท้าย โดยมีความเสี่ยงที่เกี่ยวข้องในการแสดงข้อมูลที่ซ้ำกัน นักพัฒนาแอปควรลองใช้ตัวเลือกที่ 1-3 แทน เนื่องจากควรมี UUID อยู่แล้ว
การทดสอบ API ของ Android 14 ด้วย Jetpack SDK
Jetpack SDK ของ Android 14 มีกำหนดเปิดตัวในวันที่ 7 มิถุนายน 2023 พร้อมกับ Android 14 เวอร์ชันเบต้า 3 คุณจะต้องเริ่มคอมไพล์แอปกับ Android 14 เพื่อให้ใช้ Android 14 Jetpack SDK ได้
หากต้องการทดสอบโซลูชันกับบิลด์ Android Developer Preview ก่อนวันที่ 7 มิถุนายน โปรดติดต่อตัวแทนติดต่อ Google เพื่อขอรับความช่วยเหลือ
หากต้องการทดสอบโซลูชันกับรุ่นเบต้า 3 คุณควรทำการเปลี่ยนแปลงต่อไปนี้ใน APK
- ตั้งค่า
compileSDKPreview = UpsideDownCake
- อัปเดตไฟล์ Manifest เพื่อรวม Intent สำหรับ Android 14 ดังนี้
# AndroidManifest.xml
<uses-permission android:name=”android.permission.health.READ_SLEEP”/>
<uses-permission android:name=”android.permission.health.READ_WEIGHT”/>
<uses-permission android:name=”android.permission.health.WRITE_WEIGHT”/>
<activity>
android:name=".RationaleActivity"
android:exported="true">
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE"/>
</intent-filter>
</activity>
<activity-alias>
android:name="AndroidURationaleActivity"
android:exported="true"
android:targetActivity=".RationaleActivity"
android:permission="android.permission.START_VIEW_PERMISSION_USAGE">
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
</intent-filter>
</activity-alias>
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
การปรับแต่ง OEM
ใน Android 14 ส่วนควบคุมความเป็นส่วนตัวและการจัดการข้อมูลของ Health Connect จะอยู่ใน การตั้งค่าระบบ
Health Connect มีการกำหนดธีม OEM ผ่านการใช้การซ้อนทับที่กำหนดเองเพื่อให้หน้าจอการจัดการข้อมูลและสิทธิ์ดูเหมือนเป็นส่วนหนึ่งของอุปกรณ์
โปรดดูเอกสารประกอบเกี่ยวกับการจัดรูปแบบ OEM ในเอกสารประกอบของบริการ Google Mobile สำหรับ Health Connect คุณอาจต้องเข้าสู่ระบบ Google Developers เพื่อดูหน้านี้