Migracja Health Connect z Androida 13 (APK) na Androida 14 (platforma)

Health Connect będzie dostarczana z Androidem 14 jako wspólna warstwa przechowywania danych o zdrowiu i aktywności fizycznej użytkowników, chroniona przez szczegółowe uprawnienia i dostępna jako aplikacja systemowa Androida (w tym dokumencie nazywana modułem „framework”).

Deweloperzy powinni traktować pakiet APK Health Connect (Android 13) jako warstwę zgodności wstecznej dla modelu platformy. Model platformy zachowa 100% funkcjonalności swojego poprzednika w formie pliku APK.

Podczas przejścia z Androida 13 na 14 niezwykle ważne jest, aby korzystanie z urządzenia było jak najbardziej płynne i intuicyjne.

W tym dokumencie przedstawiamy plan migracji, podajemy przykładowe scenariusze migracji i wymieniamy zmiany w pakiecie Jetpack SDK, który ułatwia dostęp do interfejsu Health Connect API.

Plan migracji

  1. Po wydaniu Androida 14 Google zacznie udostępniać Health Connect jako aplikację systemową Androida.
  2. Gdy funkcje będą identyczne, dane zostaną uzupełnione z pliku APK.
  3. Wszystkie punkty wejścia będą kierować na interfejs aplikacji systemowej.
  4. Rozpocznie się migracja danych. Podczas migracji interfejsy API modułu zostaną zawieszone ze stanem „Migracja w toku”. Będzie on też widoczny w interfejsie Health Connect.
  5. Po zakończeniu migracji plik APK można odinstalować.

Przykładowe scenariusze migracji

Oto przykładowe scenariusze, które wyjaśniają proces migracji w przypadku obu typów danych:intervalseries.

Przykład 1. Bieganie (dane interwałowe)

Użytkownik zbierał dane o bieganiu przez 10 lat, poświęcając na to godzinę dziennie. Oznacza to:

  • Zapisy sesji ćwiczeń: 365 * 10 * 1
  • Kroki: 365 * 10 * 1
  • Kalorie: 365 * 10 * 1
  • Łącznie = 365 * 10 * 3 (365 * 30) = 10 950

Biorąc pod uwagę,że 1 partia to 3000 rekordów, dane obejmują około 4 partie.

Nasze testy wewnętrzne potwierdziły, że wstawienie typowego fragmentu zajmuje około sekundy, więc dane w przykładzie zostaną przeniesione w około 4 sekundy.

Przykład 2. Tętno (dane szeregowe)

Użytkownik zebrał dane o tętnie z 5 lat (z rekordem tworzonym co minutę), co daje łącznie 2 628 000 rekordów.

Przy 3000 rekordów na fragment dane są rozdzielone na 876 fragmentów. Biorąc pod uwagę, że wstawienie 1 bloku zajmuje około sekundy, migracja danych potrwa mniej niż 15 minut.

Proponowany proces migracji

Zdecydowaliśmy się na natychmiastową migrację. W praktyce oznacza to, że plik APK stanie się nieaktywny, gdy tylko urządzenie zostanie zaktualizowane do Androida 14, przy minimalnej interwencji użytkownika.

Oto ogólny proces migracji:

  1. Użytkownik aktualizuje urządzenie do Androida 14.
  2. Jetpack 14 kieruje użytkownika do interfejsów API modułu i blokuje go, gdy trwa migracja.
  3. Proces migracji rozpoczyna się, gdy wersja modułu jest zgodna z pakietem APK pod względem funkcji, czyli zawiera ten sam zestaw funkcji lub więcej. Po rozpoczęciu procesu migracji plik APK przenosi uprawnienia i dane.
    1. Jeśli obie wersje nie są ze sobą zgodne pod względem funkcji, moduł trzeba będzie uaktualnić. Po zakończeniu uaktualniania rozpocznie się proces migracji.
  4. Po zakończeniu migracji stan zmieni się na „Migracja zakończona”, a interfejsy API modułu zostaną odblokowane.
  5. Teraz możesz odinstalować plik APK.

Elementy interfejsu migracji

Moduł platformy wyświetla te ekrany w celu edukacyjnym, zarówno przed migracją, jak i w jej trakcie:

Rysunek 1. Jeśli pakiet APK Health Connect nie jest „świadomy migracji”, wyświetli się komunikat z prośbą o zaktualizowanie pakietu APK. Jeśli użytkownik odrzuci aktualizację, moduł będzie nadal działać i gromadzić uprawnienia oraz dane.

Ilustracja przedstawiająca wymagane aktualizacje telefonu
Rysunek 1. Prośba o zaktualizowanie pliku APK Health Connect.

Rysunek 2. Jeśli moduł platformy wymaga aktualizacji, aby stać się zgodny z funkcją, wyświetli się prośba o przeprowadzenie aktualizacji i ponowne uruchomienie urządzenia. Jeśli użytkownik odrzuci aktualizację, moduł będzie nadal działać i zacznie gromadzić uprawnienia i dane.

Ilustracja przedstawiająca konieczność aktualizacji pliku APK
Rysunek 2. Prośba o zaktualizowanie modułu platformy.

Rysunek 3. Podczas procesu migracji wyświetla się spinner z tekstem informującym o synchronizacji danych.

Ilustracja synchronizacji danych
Ilustracja 3. Migracja danych w toku.

Dane po usunięciu duplikatów

Jeśli moduł platformy zaczął uzyskiwać dane i uprawnienia przed przeprowadzeniem migracji lub przywracaniem z chmury, obowiązują te zasady:

Uprawnienia

Jeśli uprawnienia są obecne w module platformy, podczas procesu migracji wszystkie zduplikowane uprawnienia uzyskane z pliku APK są ignorowane.

Dane

Podczas migracji zduplikowane dane pochodzące z pliku APK są ignorowane. Preferowane są nowsze dane z modułu.

Dane są usuwane zduplikowane w clientRecordId, jeśli identyfikator rekordu jest podany przez klienta. W przeciwnym razie przedziały czasowe (startTimeendTime w przypadku rekordów wewnętrznych oraz time w przypadku rekordów natychmiastowych) są traktowane jako klucz wraz z typem danych i nazwą pakietu aplikacji.

Zmiany w pakiecie Jetpack SDK

Pakiet SDK Jetpack służy jako wspólny punkt integracji zarówno pakietu APK Health Connect, jak i interfejsów API platformy Health Connect.

Producenci OEM mogą rozpocząć integrację z Jetpackiem 13, aby po udostępnieniu Jetpacka 14 móc wykorzystać nową bibliotekę i skompilować ją w Androidzie 14.

Udostępnimy nową wersję pakietu SDK, która będzie obsługiwać przejście na Androida 14. Aby zapewnić płynne przejście, musisz wprowadzić pewne zmiany w dotychczasowej integracji.

Deklaracja uprawnień

W Androidzie 13 uprawnienia deklaruje się za pomocą niestandardowego formatu uprawnień w pliku zasobów połączonym z manifestem:

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

Aby obsługiwać Androida 14, deweloperzy muszą przejść na standardowy format uprawnień:

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

Otwieranie Health Connect

Większość aplikacji innych firm ma przycisk, który otwiera aplikację Health Connect, np. przycisk „Zarządzaj dostępem” w Fitbicie.

Na Androidzie 13 możesz otworzyć aplikację Health Connect, używając nazwy pakietu lub działania androidx.health.ACTION_HEALTH_CONNECT_SETTINGS.

W Androidzie 14 musisz użyć działania intencji określonego w pakiecie Jetpack SDK, które ma różne wartości w zależności od wersji Androida, na której działa:

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

Pobieranie klienta Health Connect

Utworzyliśmy jeden interfejs API o nazwie sdkStatus, dostępny w Jetpack 11, który zastępuje 2 inne wycofane interfejsy API: IsSdkSupported()isProviderAvailable().

Zmiany w interfejsie API rekordów sesji

W ramach wersji alfa10 usunęliśmy 4 podtypy ExerciseSession:

  • ExerciseEvent
  • ExerciseLaps
  • ExerciseRepetitions
  • SwimmingStrokes

Podobnie jak w przypadku ExerciseSessionRecord, typ SleepStage stanie się podtypem SleepSession.

Zarówno podtypy ExerciseSessionRecord, jak i zmiany SleepSession zostaną udostępnione w ramach aktualizacji pakietu SDK w kwietniu.

Aktualizacja typu sesji ćwiczeń

Te typy sesji ćwiczeń nie będą już obsługiwane, ale w późniejszym terminie zostaną dodane jako typy segmentów:

  • 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

Rodzaje wymiany:

  • EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
  • EXERCISE_TYPE_STRENGTH_TRAINING
  • EXERCISE_TYPE_CALISTHENICS

Obsługa historii zmian

Dzienniki zmian nie zostaną przeniesione w ramach przejścia z pliku APK na Androida 14.

Po zakończeniu migracji zaczniesz otrzymywać wyjątki TOKEN_EXPIRED lub TOKEN_INVALID. Należy je obsługiwać w ten sposób (w kolejności preferencji):

1. Odczytywanie i usuwanie duplikatów wszystkich danych od czasu ostatniego odczytu lub z ostatnich 30 dni

Przechowywać sygnaturę czasową ostatniego odczytu danych z Health Connect przez aplikację. Po wygaśnięciu tokena dane należy ponownie odczytać z tej wartości lub z poprzednich 30 dni (w zależności od tego, która z tych wartości jest mniejsza) i usunąć duplikaty z wcześniej odczytanych danych za pomocą identyfikatora UUID.

2. Odczytywanie danych od sygnatury czasowej „ostatniego odczytu”

Ustal sygnaturę czasową wskazującą, kiedy dane były ostatnio odczytywane z Health Connect, a po wygaśnięciu tokena odczytaj wszystkie dane po tej wartości.

3. Usuń i ponownie odczytaj dane z ostatnich 30 dni

Usunąć wszystkie dane odczytane z Health Connect w ciągu ostatnich 30 dni i odczytać je ponownie (np. tak jak to się dzieje, gdy aplikacje po raz pierwszy integrują się z Health Connect).

4. Nie rób nic (czyli ponownie odczytaj dane z ostatnich 30 dni i nie usuwaj duplikatów)

Należy go używać w ostateczności, ponieważ wiąże się z ryzykiem wyświetlania zduplikowanych danych. Deweloperzy powinni raczej rozważyć opcje 1–3, ponieważ identyfikatory UUID powinny być już wdrożone.

Testowanie interfejsów API Androida 14 za pomocą pakietu Jetpack SDK

Pakiet SDK Jetpack na Androida 14 zostanie udostępniony 7 czerwca 2023 r. wraz z wersją beta 3 Androida 14. Aby móc używać pakietu SDK Jetpack na Androida 14, musisz zacząć kompilować aplikację pod kątem Androida 14.

Jeśli chcesz przetestować swoje rozwiązanie na wersjach Androida w programie Developer Preview przed 7 czerwca, skontaktuj się z osobą kontaktową w Google, aby uzyskać pomoc.

Jeśli chcesz przetestować swoje rozwiązanie w wersji Beta 3, wprowadź w pliku APK te zmiany:

  1. Ustaw compileSDKPreview = UpsideDownCake.
  2. Zaktualizuj plik manifestu, aby uwzględnić intencję dla Androida 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>

Dostosowanie OEM

W Androidzie 14 ustawienia prywatności i zarządzania danymi w Health Connect znajdują się w Ustawieniach systemu.

Aby ekrany zarządzania danymi i uprawnieniami wyglądały jak część urządzenia, Health Connect oferuje motywy OEM za pomocą niestandardowych nakładek.

Dokumentację dotyczącą stylizacji OEM znajdziesz w dokumentacji Usług mobilnych Google w Health Connect. Aby wyświetlić tę stronę, może być konieczne zalogowanie się w Google Developers.