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

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

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

ในระหว่างการเปลี่ยนจาก 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 บางส่วนได้

การทดสอบภายในของเรายืนยันว่า กลุ่มตัวอย่างโดยทั่วไปจะใช้เวลาประมาณ เป็นอันดับที่ 2 เพื่อย้ายข้อมูลข้างต้น ในประมาณ 4 วินาที

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

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

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

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

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

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

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

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

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

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

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


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

ต้องอัปเดต APK


รูปที่ 3 ไอคอนหมุนจะปรากฏขึ้นระหว่างขั้นตอนการย้ายข้อมูลพร้อมข้อความเพื่ออธิบายว่ากำลังซิงค์ข้อมูลอยู่

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

ข้อมูลที่ซ้ำซ้อน

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

สิทธิ์

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

ข้อมูล

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

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

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

Jetpack SDK ทำหน้าที่เป็นจุดผสานรวมทั่วไปสำหรับทั้ง เชื่อมต่อ APK และ 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

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

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

หากต้องการทดสอบโซลูชันเทียบกับรุ่นเบต้า 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 นำเสนอการกำหนดธีม OEM ผ่านการใช้การวางซ้อนที่กำหนดเอง

ดูเอกสารประกอบเกี่ยวกับการจัดรูปแบบ OEM ได้ที่บริการ Google Mobile ของ Health Connect เอกสารประกอบ