ย้ายข้อมูล Health Connect จาก Android 13 (APK) ไปยัง Android 14 (เฟรมเวิร์ก)

Health Connect จะรวมอยู่ในแพ็กเกจของ Android 14 เป็นเลเยอร์พื้นที่เก็บข้อมูลทั่วไปสำหรับข้อมูลสุขภาพของผู้บริโภค ซึ่งได้รับการปกป้องด้วยสิทธิ์แบบละเอียดและเข้าถึงได้เป็นแอประบบ Android (ซึ่งจะเรียกว่า "เฟรมเวิร์ก" ในเอกสารนี้)

นักพัฒนาแอปควรพิจารณา APK ของ Health Connect (Android 13) เป็นเลเยอร์ความเข้ากันได้แบบย้อนหลังสำหรับโมเดลเฟรมเวิร์ก โมเดลเฟรมเวิร์กจะยังคงฟีเจอร์ต่างๆ ไว้เหมือนเดิม 100% เมื่อเทียบกับ APK รุ่นก่อนหน้า

ในระหว่างการเปลี่ยนจาก Android 13 เป็น 14 ประสบการณ์ของผู้ใช้ต้องราบรื่นและใช้งานง่ายที่สุด

เอกสารนี้จะกล่าวถึงแผนการย้ายข้อมูล แสดงตัวอย่างสถานการณ์การย้ายข้อมูล และแสดงการเปลี่ยนแปลงใน Jetpack SDK ซึ่งช่วยให้เข้าถึง Health Connect API ได้ง่ายขึ้น

แผนการย้ายข้อมูล

  1. เมื่อ Android 14 เปิดตัว Google จะเปลี่ยนไปให้บริการ Health Connect เป็นแอประบบของ Android
  2. จากนั้นระบบจะทดแทนข้อมูลจาก APK เมื่อฟีเจอร์มีความเท่าเทียมกัน
  3. จุดแรกเข้าทั้งหมดจะกําหนดเป้าหมาย UI ของแอประบบ
  4. การย้ายข้อมูลจะเริ่มขึ้น ในระหว่างการย้ายข้อมูล API ของข้อบังคับจะหยุดชั่วคราวโดยมีสถานะเป็น "อยู่ระหว่างการย้ายข้อมูล" ข้อมูลนี้ยังแสดงใน UI ของ Health Connect ด้วย
  5. เมื่อย้ายข้อมูลเสร็จแล้ว คุณจะถอนการติดตั้ง APK ได้

ตัวอย่างสถานการณ์การย้ายข้อมูล

ต่อไปนี้คือตัวอย่างสถานการณ์ที่อธิบายกระบวนการย้ายข้อมูลสำหรับทั้งประเภทข้อมูล interval และ series

ตัวอย่างที่ 1 - การทํางาน (ข้อมูลช่วงเวลา)

ผู้ใช้เก็บรวบรวมบันทึกการทํางานเป็นเวลา 10 ปีเป็นเวลา 1 ชั่วโมงทุกวัน ซึ่งเทียบเท่ากับ

  • บันทึกเซสชันการออกกําลังกาย: 365 * 10 * 1
  • ขั้นตอน: 365 * 10 * 1
  • แคลอรี่: 365 * 10 * 1
  • รวม = 365 * 10 * 3 (365 * 30) = 10,150

เมื่อพิจารณาว่า 1 ชิ้นเท่ากับ 3,000 ระเบียน ข้อมูลข้างต้นจะมีจํานวนทั้งหมดประมาณ 4 ชิ้น

การทดสอบภายในของเรายืนยันว่าการแทรกข้อมูลกลุ่มหนึ่งๆ ใช้เวลาประมาณ 1 วินาที ดังนั้นการย้ายข้อมูลข้างต้นจึงใช้เวลาประมาณ 4 วินาที

ตัวอย่างที่ 2 - อัตราการเต้นของหัวใจ (ข้อมูลชุด)

ผู้ใช้รวบรวมข้อมูลอัตราการเต้นของหัวใจเป็นเวลา 5 ปี (โดยสร้างระเบียนทุกนาที) รวมเป็น 2,628,000 ระเบียน

เมื่อใช้ระเบียน 3,000 รายการต่อกลุ่ม ระบบจะกระจายข้อมูลไปยังกลุ่ม 876 กลุ่ม เนื่องจากการแทรกข้อมูล 1 ชิ้นใช้เวลาประมาณ 1 วินาที การย้ายข้อมูลจึงจะเสร็จสิ้นภายในเวลาไม่ถึง 15 นาที

ขั้นตอนการย้ายข้อมูลที่เสนอ

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

มาดูขั้นตอนการย้ายข้อมูลระดับสูงกัน

  1. ผู้ใช้อัปเกรดอุปกรณ์เป็น Android 14
  2. Jetpack 14 จะเปลี่ยนเส้นทางผู้ใช้ไปยัง API ของข้อบังคับ และบล็อกผู้ใช้ขณะที่การย้ายข้อมูลกำลังดำเนินการ
  3. กระบวนการย้ายข้อมูลจะเริ่มขึ้นเมื่อเวอร์ชันของข้อบังคับใช้ฟีเจอร์ที่เข้ากันได้กับ APK กล่าวคือ เวอร์ชันของข้อบังคับใช้ชุดฟีเจอร์เดียวกันหรือมากกว่า เมื่อกระบวนการย้ายข้อมูลเริ่มต้นขึ้น APK จะย้ายข้อมูลสิทธิ์และข้อมูล
    1. หากทั้ง 2 เวอร์ชันใช้ฟีเจอร์ร่วมกันไม่ได้ คุณจะต้องอัปเกรดเวอร์ชันของข้อบังคับ เมื่อการอัปเกรดเสร็จสมบูรณ์แล้ว กระบวนการย้ายข้อมูลจะเริ่มต้นขึ้น
  4. เมื่อการย้ายข้อมูลเสร็จสมบูรณ์แล้ว ระบบจะเปลี่ยนสถานะเป็น "ย้ายข้อมูลเสร็จสมบูรณ์" และระบบจะเลิกบล็อก API ของโมดูล
  5. ตอนนี้คุณถอนการติดตั้ง APK ได้แล้ว

องค์ประกอบ UI ของการย้ายข้อมูล

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

รูปที่ 1 หาก APK ของ Health Connect ไม่ได้ "รับรู้การย้ายข้อมูล" ระบบจะแสดงข้อความแจ้งให้ผู้ใช้อัปเดต APK หากผู้ใช้ปฏิเสธการอัปเดต โมดูลจะยังคงทํางานต่อไปและเริ่มรวบรวมสิทธิ์และข้อมูล

ต้องอัปเดตโทรศัพท์


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

ต้องอัปเดต APK


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

การซิงค์ข้อมูล

ข้อมูลที่กรองข้อมูลที่ซ้ำกันออกแล้ว

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

สิทธิ์

หากมีสิทธิ์ภายในโมดูลเฟรมเวิร์ก ระบบจะไม่สนใจสิทธิ์ที่ซ้ำกันซึ่งได้รับจาก APK ในระหว่างกระบวนการย้ายข้อมูล

ข้อมูล

ในระหว่างการย้ายข้อมูล ระบบจะไม่สนใจข้อมูลที่ซ้ำกันซึ่งมาจาก APK ระบบจะให้ความสําคัญกับข้อมูลจากข้อบังคับล่าสุดมากกว่า

ระบบจะกรองข้อมูลซ้ำออกใน clientRecordId หากลูกค้าระบุรหัสระเบียน หากไม่ใช่ ระบบจะถือว่าช่วงเวลา (startTime และ endTime สำหรับระเบียนภายใน และ time สำหรับระเบียนทันที) เป็นคีย์ พร้อมกับประเภทข้อมูลและชื่อแพ็กเกจของแอป

การเปลี่ยนแปลงใน Jetpack SDK

Jetpack SDK เป็นจุดผสานรวมทั่วไปสำหรับทั้ง APK ของ Health Connect และ API ของเฟรมเวิร์ก Health Connect

OEM สามารถเริ่มผสานรวมกับ Jetpack 13 เพื่อให้คุณใช้ไลบรารีใหม่และคอมไพล์ภายใน Android 14 ได้เมื่อ Jetpack 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()

การเปลี่ยนแปลง Session Record API

เราได้ลบExerciseSessionย่อย 4 รายการต่อไปนี้ออกแล้วในรุ่น alpha10

  • ExerciseEvent
  • ExerciseLaps
  • ExerciseRepetitions
  • SwimmingStrokes

SleepStage จะกลายเป็นประเภทย่อยของ SleepSession เช่นเดียวกับ ExerciseSessionRecord

ทั้งการเปลี่ยนแปลง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

Android 14 Jetpack SDK มีกำหนดจะเปิดตัวในวันที่ 7 มิถุนายน 2023 พร้อมกับรุ่นเบต้า 3 ของ Android 14 คุณจะต้องเริ่มคอมไพล์แอปสำหรับ Android 14 จึงจะใช้ Jetpack SDK ของ Android 14 ได้

หากต้องการทดสอบโซลูชันกับบิลด์ Android Developer Preview ก่อนวันที่ 7 มิถุนายน โปรดติดต่อตัวแทนติดต่อ Google เพื่อขอความช่วยเหลือ

หากต้องการทดสอบโซลูชันกับรุ่นเบต้า 3 คุณควรทำการเปลี่ยนแปลงต่อไปนี้ใน APK

  1. ตั้งค่า compileSDKPreview = UpsideDownCake
  2. อัปเดตไฟล์ 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 ได้ที่เอกสารประกอบของ Health Connect Google Mobile Services คุณอาจต้องเข้าสู่ระบบ Google Developers เพื่อดูหน้าดังกล่าว