העברת Health Connect מ-Android 13 (APK) ל-Android 14 (מסגרת)

Health Connect תצורף ל-Android 14 כשכבה משותפת של אחסון נתונים של נתונים בתחום בריאות הצרכנים, מוגנים על ידי הרשאות מפורטות ונגישים אפליקציית המערכת של Android (נקראת במסמך הזה framework ).

מפתחים צריכים להתייחס ל-APK של Health Connect (Android 13) כאל גישה לאחור של מודל ה-framework. מודל ה-framework ישמור התאמת תכונות של 100% לתכונות שקודמות ל-APK.

במהלך המעבר מ-Android 13 ל-14, חשוב מאוד חוויית המשתמש צריכה להיות חלקה ואינטואיטיבית ככל האפשר.

במסמך הזה מתוארת תוכנית ההעברה, הנה כמה דוגמאות להעברה ומפרט שינויים ב-Jetpack SDK, שמאפשרים גישה ממשק API של Health Connect.

תוכנית העברה

  1. אחרי השקת Android 14, Google תעבור לספק את Health Connect בתור אפליקציית מערכת Android.
  2. לאחר מכן, יתבצע מילוי חוסרים של הנתונים מה-APK ברגע שתושג ההתאמה של התכונות.
  3. כל נקודות הכניסה יטרגטו את ממשק המשתמש של אפליקציית המערכת.
  4. העברת הנתונים תתחיל. בזמן שההעברה מתקדמת, ממשקי ה-API של המודול יושעו במצב 'העברה בתהליך' הסטטוס. הזה יהיו גלויים גם בממשק המשתמש של Health Connect.
  5. לאחר השלמת ההעברה, ניתן יהיה להסיר את ה-APK.

תרחישי העברה לדוגמה

הנה מספר תרחישים לדוגמה שמסבירים את תהליך ההעברה סוגי הנתונים interval ו-series:

דוגמה 1 – ריצה (נתוני מרווח)

משתמש אסף רשומות פעילות במשך 10 שנים במשך שעה בכל יום. הזה שווה ל:

  • רשומות של סשנים של תרגילים: 365 * 10 * 1
  • שלבים: 365 * 10 * 1
  • קלוריות: 365 * 10 * 1
  • סה"כ = 365 כפול 10 כפול 3 (365 כפול 30) = 10,150

בהינתן שמקטע אחד שווה ל-3,000 רשומות, סיכום הנתונים שלמעלה הוא 4 של מקטעים.

הבדיקה הפנימית שלנו אישרה שמקטע אופייני לוקח כ- השנייה להוספה, כך שהנתונים שלמעלה יועברו תוך כ-4 שניות.

דוגמה 2 – דופק (נתוני סדרה)

משתמש אסף נתוני דופק במשך 5 שנים (עם רשומה שנוצרה כל דקות) בסך 2,628,000 רשומות.

כשהערך הוא 3,000 רשומות לכל מקטע, הנתונים מחולקים בין 876 מקטעים. נתון להוספת מקטע אחד נדרשת כשנייה, הנתונים יועברו בפחות מ-15 דקות.

תהליך ההעברה המוצע

החלטנו לבחור להעברה מיידית. מבחינה מעשית, המשמעות היא שה-APK יהפוך ללא פעיל מיד לאחר שדרוג המכשיר ל- Android 14, עם כמה שפחות התערבות של משתמשים.

הנה תהליך העברה כללי:

  1. המשתמש משדרג את המכשיר ל-Android 14.
  2. Jetpack 14 מנתב את המשתמש לממשקי ה-API של המודול, וחוסם אותם באמצעות מתבצעת העברה.
  3. תהליך ההעברה מתחיל כשגרסת המודול תואמת לתכונות ב-APK: כלומר, גרסת המודול מכילה את אותה קבוצת תכונות, או עוד. אחרי שתהליך ההעברה מתחיל, ה-APK מעביר את ההרשאות ונתונים.
    1. אם שתי הגרסאות לא תואמות לתכונות, גרסת המודול נדרש שדרוג. לאחר השלמת השדרוג, תהליך ההעברה
  4. לאחר השלמת ההעברה, המצב ישתנה ל'העברה' הושלם', וממשקי ה-API של המודול מבוטלים.
  5. כעת ניתן להסיר את ההתקנה של ה-APK.

רכיבים בממשק המשתמש של ההעברה

המסכים הבאים מוצגים על ידי מודול framework לחינוך משתמשים למטרות, לפני ההעברה ובמהלכה:

איור 1. אם ה-APK של Health Connect לא 'מודע להעברה', תוצג הודעה מורה למשתמש לעדכן את ה-APK. אם המשתמש ידחה את העדכון, המודול ממשיך לפעול ומתחיל לצבור הרשאות ונתונים:

נדרש עדכון של הטלפון


איור 2. אם המודול של framework דורש עדכון כדי להפוך אותו לתכונה, תואמת, תוצג בקשה מהמשתמש לבצע את העדכון להפעיל מחדש את המכשיר. אם המשתמש דוחה את העדכון, המודול ממשיך כדי לפעול ומתחיל לצבור הרשאות ונתונים:

נדרש עדכון APK


איור 3. במהלך תהליך ההעברה מוצג סימן גרפי שפעולה מתבצעת, עם טקסט שמסביר שמתבצע סנכרון של הנתונים:

סנכרון נתונים

נתונים שהוסרו

אם המודול של framework התחיל לקבל נתונים והרשאות לפני ביצוע העברה או שחזור מבוסס-ענן, בכפוף לכללים.

הרשאות

אם הרשאות קיימות במודול framework, כל כפילות המערכת מתעלמת מהרשאות שהתקבלו מה-APK בזמן תהליך ההעברה.

נתונים

במהלך ההעברה, המערכת מתעלמת מנתונים כפולים שמקורם ב-APK. סמל האפשרויות הנוספות הנתונים העדכניים מהמודול מקבלים העדפה.

המערכת מסירה כפילויות של הנתונים בתאריך clientRecordId אם מזהה הרשומה סופק על ידי הלקוח. אם לא, מרווחי זמן (startTime ו-endTime למודעות פנימיות ו-time עבור רשומות מיידיות) נחשבים כמפתח, יחד עם הנתונים הסוג ושם החבילה של האפליקציה.

שינויים ב-Jetpack SDK

ה-Jetpack SDK משמש כנקודת השילוב המשותפת קישור בין APK לבין ממשקי ה-API של מסגרת Health Connect.

יצרני ציוד מקורי יוכלו להתחיל בשילוב עם Jetpack 13 כך שכש-Jetpack 14 תוכלו להתאים את הספרייה החדשה ולהרכיב אותה בתוך Android מגרסה 14.

אנחנו נפרסם גרסה חדשה של ה-SDK שתומכת במעבר אל Android מגרסה 14. תצטרכו לבצע כמה שינויים בשילוב הקיים כדי כדי להבטיח מעבר חלק.

הצהרת הרשאות

ב-Android 13, אתם מצהירים על הרשאות בפורמט מותאם אישית של הרשאות, קובץ משאב שמקושר למניפסט:

#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 אחרים שהוצאו משימוש – IsSdkSupported() ו isProviderAvailable()

שינויים ב-API של רשומת סשנים

ארבעה סוגי משנה של ExerciseSession נמחקו כחלק מאלפא 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. קריאת נתונים מאז 'קריאה אחרונה' timestamp

יצירה של חותמת זמן שמציינת מתי הנתונים נקראו לאחרונה מ-Health Connect , וכשתוקף האסימון, לקרוא את כל הנתונים אחרי הערך הזה.

3. מחיקה וקריאה חוזרת של נתונים מ-30 הימים האחרונים

מחיקת כל הנתונים שנקראו מ-Health Connect ב-30 הימים האחרונים וקריאת הכול של הנתונים האלה שוב (למשל, כפי שמתבצע בפעם הראשונה שבה אפליקציות משתלבות עם Health חיבור).

4. לא לעשות כלום (כלומר, לקרוא מחדש את הנתונים מ-30 הימים האחרונים בלי לבטל כפילויות)

יש להשתמש במצב זה בתור מוצא אחרון, עם סיכון גבוה להצגת מודעות נתונים כפולים. מומלץ למפתחים במקום זאת לבחון את אפשרויות 1-3, בהינתן שמזהי UUID אמורים כבר להיות קיימים.

בדיקת ממשקי API של Android 14 באמצעות Jetpack SDK

ערכת ה-SDK של Android 14 Jetpack תפורסם ב-7 ביוני 2023, יחד עם גרסת בטא 3 של Android 14. יהיה עליך להתחיל להרכיב את האפליקציה מול עם Android 14 תהיה אפשרות להשתמש ב-Android 14 Jetpack SDK.

כדי לבדוק את הפתרון שלך מול גרסאות build של תצוגה מקדימה למפתחים של Android לפני 7 ביוני, עליך לפנות לאיש הקשר שלך ב-Google לקבלת עזרה.

אם אתם רוצים לבדוק את הפתרון שלכם בהשוואה לגרסת בטא 3, עליכם ליצור את השינויים הבאים ב-APK:

  1. הגדרה של compileSDKPreview = UpsideDownCake.
  2. צריך לעדכן את המניפסט כך שיכלול 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 תיעוד.