Health Connect von Android 13 (APK) zu Android 14 (Framework) migrieren

Health Connect erhält Android 14 als gemeinsame Datenspeicherebene für Gesundheitsdaten von Verbrauchern, die durch detaillierte Berechtigungen geschützt sind und als Android-System-App (in diesem Dokument als „Framework“ bezeichnet) Modul).

Entwickler sollten das Health Connect APK (Android 13) Kompatibilitätsebene für das Framework-Modell. Das Framework-Modell behält 100% Funktionsparität mit dem APK-Vorgänger des Vorgängers.

Bei der Umstellung von Android 13 auf 14 ist es außerordentlich wichtig, die Nutzererfahrung so reibungslos und intuitiv wie möglich zu gestalten.

Dieses Dokument enthält eine Beschreibung des Migrationsplans und einige Beispiele für die Migration. und eine Liste der Änderungen am Jetpack SDK, das den Zugriff auf den Health Connect API

Migrationsplan

  1. Nach der Veröffentlichung von Android 14 stellt Google Health Connect bereit als Android-System-App.
  2. Sobald die Funktionsparität erreicht ist, werden die Daten aus dem APK per Backfill übertragen.
  3. Alle Einstiegspunkte richten sich nach der Benutzeroberfläche der System-App.
  4. Die Datenmigration wird gestartet. Während der Migration Modul-APIs werden mit dem Status „Migration im Prozess“ gesperrt Status. Dieses sind auch in der Health Connect-Benutzeroberfläche sichtbar.
  5. Sobald die Migration abgeschlossen ist, kann das APK deinstalliert werden.

Beispiele für Migrationsszenarien

Hier sind einige Beispielszenarien, die den Migrationsprozess für beide interval- und series-Datentypen:

Beispiel 1 – Wird ausgeführt (Intervalldaten)

Ein Nutzer erfasst täglich eine Stunde lang Laufdaten für 10 Jahre. Dieses entspricht:

  • Trainingsaufzeichnungen: 365 * 10 * 1
  • Schritte: 365 * 10 * 1
  • Kalorien: 365 * 10 * 1
  • Gesamt = 365 * 10 * 3 (365 * 30) = 10.150

Da ein Chunk 3.000 Datensätzen entspricht, ergeben die obigen Daten insgesamt etwa 4 Blöcke.

Unsere internen Tests haben ergeben, dass ein typischer Chunk zum Einfügen, sodass die obigen Daten in etwa 4 Sekunden.

Beispiel 2 – Herzfrequenz (Seriendaten)

Ein Benutzer hat Herzfrequenzdaten über 5 Jahre gesammelt (mit einem Datensatz, der alle Minute) und insgesamt 2.628.000 Datensätze.

Bei 3.000 Datensätzen pro Block werden die Daten auf 876 Blöcke verteilt. Angegeben dass ein Chunk etwa eine Sekunde zum Einfügen benötigt, werden die Daten in weniger als 15 Minuten.

Vorgeschlagener Migrationsablauf

Wir haben uns für eine sofortige Migration entschieden. In der Praxis bedeutet dies, bedeutet, dass das APK inaktiv wird, sobald das Gerät auf Android 14 mit minimalem Eingriff durch den Nutzer

Werfen wir einen Blick auf den allgemeinen Migrationsablauf:

  1. Der Nutzer aktualisiert sein Gerät auf Android 14.
  2. Jetpack 14 leitet den Nutzer zu den Modul-APIs weiter und blockiert sie, während die Migration läuft.
  3. Der Migrationsprozess beginnt, wenn die Modulversion mit den Funktionen kompatibel ist mit dem APK, d.h. die Modulversion enthält dieselben Funktionen oder mehr. Sobald der Migrationsprozess begonnen hat, migriert das APK die Berechtigungen und Daten.
    1. Sind beide Versionen nicht funktionskompatibel, wird die Modulversion müssen aktualisiert werden. Sobald das Upgrade abgeschlossen ist, beginnen.
  4. Sobald die Migration abgeschlossen ist, ändert sich der Status in „Migration“. Complete' (Abgeschlossen) an, wodurch die Blockierung der Modul-APIs aufgehoben wird.
  5. Das APK kann jetzt deinstalliert werden.

UI-Elemente der Migration

Die folgenden Bildschirme werden vom Framework-Modul für die Nutzerschulung angezeigt sowohl vor als auch während der Migration:

Abbildung 1: Wenn das Health Connect-APK nicht „migrationsbasiert“ ist, wird eine Aufforderung angezeigt und den Nutzer anweisen, das APK zu aktualisieren. Wenn der Nutzer die Aktualisierung ablehnt, funktioniert weiterhin und beginnt, Berechtigungen und Daten zu sammeln:

Smartphone-Update erforderlich


Abbildung 2: Wenn das Framework-Modul aktualisiert werden muss, damit es zu einer Funktion wird kompatibel ist, wird eine Aufforderung angezeigt, die den Nutzer auffordert, das Update durchzuführen, das Gerät neu zu starten. Wenn der Nutzer die Aktualisierung ablehnt, fährt das Modul fort. und beginnt, Berechtigungen und Daten zu sammeln:

APK-Update erforderlich


Abbildung 3: Während der Migration wird ein rotierendes Ladesymbol mit einem Hinweis angezeigt, dass die Daten synchronisiert werden:

Datensynchronisierung

Deduplizierte Daten

Wenn das Framework-Modul begonnen hat, Daten und Berechtigungen abzurufen bevor eine Migration oder eine cloudbasierte Wiederherstellung durchgeführt wird, geschieht Folgendes: gelten.

Berechtigungen

Wenn im Framework-Modul Berechtigungen vorhanden sind, werden alle doppelten Vom APK erworbene Berechtigungen werden während der Migration ignoriert.

Daten

Während der Migration werden doppelte Daten vom APK ignoriert. Mehr Aktuelle Daten aus dem Modul haben Vorrang.

Die Daten werden am clientRecordId dedupliziert, wenn die Datensatz-ID vom Client. Ist dies nicht der Fall, werden die Zeitintervalle (startTime und endTime für interne Datensätze und time für Instant-Datensätze) werden zusammen mit den Daten als Schlüssel behandelt Typ und Paketname der App.

Änderungen im Jetpack SDK

Das Jetpack SDK dient als gemeinsamer Integrationspunkt für die Verbinden Sie das APK und die Framework-APIs von Health Connect.

OEMs können mit der Integration von Jetpack 13 beginnen, sodass Jetpack 14 verfügbar ist, können Sie die neue Bibliothek verwenden und innerhalb von Android 14

Wir veröffentlichen eine neue SDK-Version, die die Umstellung auf Android 14 Sie müssen einige Änderungen an Ihrer bestehenden Integration vornehmen, um sorgen für einen reibungslosen Übergang.

Erklärung von Berechtigungen

In Android 13 deklarieren Sie Berechtigungen mithilfe eines benutzerdefinierten Berechtigungsformats, Ressourcendatei, die mit dem Manifest verknüpft ist:

#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>

Zur Unterstützung von Android 14 müssen Entwickler zu den Standardberechtigungen wechseln Format:

#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 öffnen

Die meisten Drittanbieter-Apps haben eine Schaltfläche, mit der die Health Connect App geöffnet werden kann, wie z. B. „Zugriff verwalten“ in Fitbit.

In Android 13 öffnen Sie die Health Connect App entweder über den Paketnamen oder über die Aktion androidx.health.ACTION_HEALTH_CONNECT_SETTINGS.

In Android 14 müssen Sie eine im Jetpack SDK angegebene Intent-Aktion verwenden, Dieser hat je nach Android-Version unterschiedliche Werte:

@get:JvmName("getHealthConnectSettingsAction") @JvmStatic val ACTION_HEALTH_CONNECT_SETTINGS

Health Connect-Client abrufen

Wir haben eine einzelne API mit dem Namen sdkStatus erstellt, die in Jetpack 11 verfügbar ist, die zwei anderen eingestellten APIs ersetzen: IsSdkSupported() und isProviderAvailable()

Session Record API-Änderungen

Vier ExerciseSession-Untertypen wurden im Rahmen von Alpha10 gelöscht Release:

  • ExerciseEvent
  • ExerciseLaps
  • ExerciseRepetitions
  • SwimmingStrokes

Wie bei ExerciseSessionRecord wird SleepStage ein Untertyp von SleepSession

Sowohl die ExerciseSessionRecord-Untertypen als auch die SleepSession-Änderungen werden im Rahmen des SDK-Updates im April veröffentlicht.

Aktualisierung des Trainingssitzungstyps

Die folgenden Trainingssitzungstypen werden nicht mehr unterstützt und stattdessen hinzugefügt später als Segmenttypen an:

  • 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

Ersatztypen:

  • EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
  • EXERCISE_TYPE_STRENGTH_TRAINING
  • EXERCISE_TYPE_CALISTHENICS

Umgang mit Änderungsprotokollen

Änderungsprotokolle werden im Rahmen des Wechsels von APK zu Android 14 nicht migriert.

Nach Abschluss der Migration erhalten Sie TOKEN_EXPIRED oder TOKEN_INVALID Ausnahmen. Dies sollte folgendermaßen gehandhabt werden: Präferenzreihenfolge):

1. Alle Daten seit dem letzten Lesevorgang lesen und deduplizieren oder für den letzten 30 Tage

Speichert einen Zeitstempel, der angibt, wann eine App zuletzt Daten aus Health Connect gelesen hat. Für Token abgelaufen sind, sollten die Daten entweder anhand dieses Wertes oder der letzten 30 Tage noch einmal gelesen werden. (je nachdem, was dem Minimum entspricht) und deduplizieren Sie sie mit bereits gelesenen Daten. mithilfe der UUID.

2. Daten seit dem letzten Lesevorgang lesen Zeitstempel

Zeitstempel festlegen, der angibt, wann Daten zuletzt aus Health Connect gelesen wurden und lesen nach Ablauf des Tokens alle Daten nach diesem Wert.

3. Daten der letzten 30 Tage löschen und noch einmal lesen

Alle aus Health Connect gelesenen Daten der letzten 30 Tage löschen und alle lesen wiederzuverwenden (z.B. nach der ersten Integration von Apps in Health) Verbinden).

4. Nichts unternehmen (d.h. die Daten der letzten 30 Tage noch einmal lesen und keine Duplikate entfernen)

Dies sollte nur als letztes Mittel eingesetzt werden, mit dem damit verbundenen Risiko, dass Anzeigen doppelte Daten. Entwickler sollten stattdessen die Optionen 1 bis 3 in Betracht ziehen, da die UUIDs bereits vorhanden sein.

Android 14-APIs mit dem Jetpack SDK testen

Das Android 14 Jetpack SDK wird voraussichtlich am 7. Juni 2023 veröffentlicht, zusammen mit den Betaversion 3 von Android 14. Sie müssen mit der Kompilierung Ihrer App beginnen, Android 14, um das Android 14 Jetpack SDK verwenden zu können

Wenn Sie Ihre Lösung mit den Builds in der Android-Entwicklervorschau testen möchten Wenden Sie sich vor dem 7. Juni an Ihren Ansprechpartner bei Google.

Wenn Sie Ihre Lösung mit der Betaversion 3 testen möchten, sollten Sie die folgenden Änderungen an Ihrem APK:

  1. Legen Sie compileSDKPreview = UpsideDownCake fest.
  2. Aktualisieren Sie das Manifest, um einen Intent für Android 14 hinzuzufügen:
# 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-Anpassung

In Android 14 werden die Datenschutz- und dass die Datenverwaltungs-Steuerelemente in den Systemeinstellungen.

Um die Bildschirme für die Datenverwaltung und Berechtigungen so aussehen zu lassen, kann Health Connect OEM-Themen nutzen, indem benutzerdefinierte Overlays verwendet werden.

Dokumentation zum OEM-Stil finden Sie unter Health Connect Google Mobile Services Dokumentation.