Health Connect'i Android 13'ten (APK) Android 14'e (çerçeve) taşıma

Health Connect, Android 14 ile birlikte tüketici sağlığı verileri için ortak bir veri depolama katmanı olarak sunulacak. Bu katman ayrıntılı izinlerle korunacak ve Android sistem uygulaması (bu belgede "çerçeve modülü" olarak anılacaktır) olarak erişilecektir.

Geliştiriciler, Health Connect APK'sını (Android 13) çerçeve modeli için geriye dönük uyumluluk katmanı olarak düşünmelidir. Çerçeve modeli, APK öncesi ile% 100 özellik eşdeğerliğini koruyacaktır.

Android 13'ten 14'e geçiş sırasında kullanıcı deneyiminin olabildiğince sorunsuz ve sezgisel olması son derece önemlidir.

Bu belgede taşıma planı özetlenmekte, bazı taşıma senaryoları sunulmakta ve Health Connect API'ye erişimi kolaylaştıran Jetpack SDK'da yapılan değişiklikler listelenmektedir.

Taşıma planı

  1. Android 14 yayınlandıktan sonra Google, Health Connect'i Android sistem uygulaması olarak sunmaya başlayacaktır.
  2. Daha sonra, özellik denkliğine ulaşıldığında veriler APK'dan doldurulur.
  3. Tüm giriş noktaları, sistem uygulamasının kullanıcı arayüzünü hedefler.
  4. Veri taşıma işlemi başlar. Taşıma işlemi devam ederken modül API'leri, "Taşıma İşlemi Devam Ediyor" durumuyla askıya alınır. Bu bilgiler Health Connect kullanıcı arayüzünde de görünür.
  5. Taşıma işlemi tamamlandıktan sonra APK kaldırılabilir.

Örnek taşıma senaryoları

Aşağıda, hem interval hem de series veri türleri için taşıma sürecini açıklayan bazı örnek senaryolar verilmiştir:

1. Örnek: Çalıştırma (aralık veriler)

Bir kullanıcı her gün 1 saat boyunca 10 yıllık koşu kaydı topladı. Bu durumda:

  • Egzersiz Oturumu Kayıtları: 365 * 10 * 1
  • Adım sayısı: 365 * 10 * 1
  • Kalori: 365 * 10 * 1
  • Toplam = 365 * 10 * 3 (365 * 30) = 10.150

1 parçanın 3.000 kayda eşit olduğu düşünülürse yukarıdaki veriler yaklaşık 4 parçaya denk gelir.

Dahili testlerimiz, tipik bir parçanın eklenmesinin yaklaşık bir saniye sürdüğünü doğruladı. Bu nedenle yukarıdaki veriler, yaklaşık 4 saniye içinde taşınır.

2. Örnek: Nabız (seri verileri)

Bir kullanıcı, toplam 2.628.000 kayıt olmak üzere 5 yıllık nabız verisi toplamıştır (dakikada bir kayıt oluşturulur).

Parça başına 3.000 kayıtta, veriler 876 parçaya dağıtılır. 1 parçanın eklenmesi yaklaşık bir saniye sürdüğü düşünülürse veriler 15 dakikadan daha kısa sürede taşınır.

Önerilen taşıma akışı

Anında taşıma'yı tercih etmeye karar verdik. Pratikte bu, cihaz Android 14'e yükseltildiğinde APK'nın devre dışı kalacağı anlamına gelir ve çok az kullanıcı müdahalesi gerekir.

Daha üst düzey bir taşıma akışına göz atalım:

  1. Kullanıcı cihazını Android 14'e yükseltir.
  2. Jetpack 14, kullanıcıyı modül API'lerine yönlendirir ve taşıma işlemi devam ederken bu API'leri engeller.
  3. Taşıma süreci, modül sürümü APK ile uyumlu bir özellik olduğunda (yani modül sürümü, aynı özellik grubunu veya daha fazlasını içerdiğinde) başlar. Taşıma süreci başladıktan sonra, APK izinleri ve verileri taşır.
    1. Her iki sürüm de özelliklerle uyumlu değilse modül sürümünün yükseltilmesi gerekir. Yükseltme tamamlandığında taşıma süreci başlar.
  4. Taşıma işlemi tamamlandıktan sonra, durum "Taşıma Tamamlandı" olarak değiştirilir ve modül API'larının engellemesi kaldırılır.
  5. APK artık kaldırılabilir.

Taşıma kullanıcı arayüzü öğeleri

Çerçeve modülü tarafından hem taşıma öncesinde hem de sırasında kullanıcı eğitimi amacıyla aşağıdaki ekranlar gösterilir:

Şekil 1. Health Connect APK'sı "taşıma hakkında bilgi sahibi" değilse kullanıcıya APK'yı güncellemesini isteyen bir istem gösterilir. Kullanıcı güncellemeyi reddederse modül çalışmaya devam eder ve izinler ile veri toplamaya başlar:

Telefonun güncellenmesi gerekiyor


Şekil 2. Çerçeve modülünün özellik ile uyumlu hale gelmesi için güncelleme yapılması gerekiyorsa kullanıcıdan güncellemeyi gerçekleştirmesini ve cihazını yeniden başlatmasını isteyen bir istem görüntülenir. Kullanıcı güncellemeyi reddederse modül çalışmaya devam eder ve izinler ile veri toplamaya başlar:

APK'nın güncellenmesi gerekiyor


Şekil 3. Taşıma işlemi sırasında, verilerin senkronize edildiğini belirten bir metinle birlikte bir döner simge görüntülenir:

Veri Senkronizasyonu

Yinelenen veriler

Çerçeve modülü herhangi bir taşıma veya bulut tabanlı geri yükleme işlemi gerçekleşmeden önce verileri ve izinleri almaya başlamışsa aşağıdaki kurallar geçerli olur.

İzinler

Çerçeve modülünde izinler varsa APK'dan alınan yinelenen izinler, taşıma işlemi sırasında göz ardı edilir.

Veri

Taşıma sırasında, APK'dan gelen yinelenen veriler yoksayılır. Modülden elde edilen daha yeni verilere öncelik verilir.

Kayıt kimliği istemci tarafından sağlandıysa veriler clientRecordId tarihinde tekilleştirilir. Aksi takdirde, zaman aralıkları (dahili kayıtlar için startTime ve endTime, anında kayıtlar için time), uygulamanın veri türü ve paket adıyla birlikte anahtar olarak değerlendirilir.

Jetpack SDK'daki değişiklikler

Jetpack SDK, hem Health Connect APK'sı hem de Health Connect çerçeve API'leri için ortak entegrasyon noktasıdır.

OEM'ler Jetpack 13 ile entegre olmaya başlayabilir. Böylece Jetpack 14 kullanıma sunulduğunda yeni kitaplığı uygun hale getirip Android 14'te derleyebilirsiniz.

Android 14'e geçişi destekleyen SDK'nın yeni bir sürümünü kullanıma sunacağız. Sorunsuz bir geçiş için mevcut entegrasyonunuzda bazı değişiklikler yapmanız gerekecektir.

İzin beyanı

Android 13'te izinleri, manifeste bağlı bir kaynak dosyasında özel bir izin biçimi kullanarak açıklarsınız:

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

Geliştiricilerin Android 14'ü desteklemek için standart izin biçimine geçmesi gerekir:

#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'i açma

Çoğu üçüncü taraf uygulamasında Health Connect uygulamasını açan bir düğme bulunur (ör. Fitbit'teki "Erişimi Yönet" düğmesi).

Android 13'te Health Connect uygulamasını paket adını kullanarak veya androidx.health.ACTION_HEALTH_CONNECT_SETTINGS işlemini kullanarak açarsınız.

Android 14'te, üzerinde çalıştığı Android sürümüne göre farklı değerlere sahip olan Jetpack SDK'da belirtilen bir intent işlemi kullanmanız gerekir:

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

Health Connect istemcisini alma

Kullanımdan kaldırılan diğer iki API'nin (IsSdkSupported() ve isProviderAvailable()) yerini almak için Jetpack 11'de bulunan sdkStatus adlı tek bir API oluşturduk.

Oturum kaydı API'sı değişiklikleri

Alfa10 sürümünün parçası olarak dört ExerciseSession alt türü silindi:

  • ExerciseEvent
  • ExerciseLaps
  • ExerciseRepetitions
  • SwimmingStrokes

ExerciseSessionRecord ile olduğu gibi SleepStage de SleepSession alt türü haline gelecek.

Nisan SDK güncellemesi kapsamında hem ExerciseSessionRecord alt türleri hem de SleepSession değişiklikleri yayınlanacaktır.

Egzersiz oturumu türü güncellemesi

Aşağıdaki egzersiz oturumu türleri artık desteklenmeyecek, bunun yerine daha sonraki bir tarihte segment türleri olarak eklenecektir:

  • 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

Değişim türleri:

  • EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING
  • EXERCISE_TYPE_STRENGTH_TRAINING
  • EXERCISE_TYPE_CALISTHENICS

Değişiklik günlüğünü işleme

Değişiklik günlükleri, APK'dan Android 14'e geçiş kapsamında taşınmayacaktır.

Taşıma işlemi tamamlandıktan sonra TOKEN_EXPIRED veya TOKEN_INVALID istisna almaya başlarsınız. Bu işlemler aşağıdaki şekillerde (tercih sırasına göre) gerçekleştirilmelidir:

1. "Son okunma" zaman damgasından veya son 30 güne ait tüm verileri okuma ve tekilleştirme

Bir uygulamanın Health Connect'ten en son veri okuma zamanının zaman damgasını depolayın. Jeton süresi dolduğunda, veriler bu değerden veya önceki 30 günden (hangisi minimum değere eşitse) yeniden okunmalı ve UUID kullanılarak daha önce okunmuş verilere göre tekilleştirilmelidir.

2. "Son okunma" zaman damgasından bu yana verileri okuma

Verilerin Health Connect'ten en son ne zaman okunduğunu gösteren bir zaman damgası oluşturun. Jeton sona erdiğinde bu değerden sonraki tüm verileri okuyun.

3. Son 30 güne ait verileri silin ve yeniden okuyun

Son 30 günde Health Connect'ten okunan tüm verileri silip tüm bu verileri tekrar okuyun (ör. uygulamalar Health Connect ile ilk kez entegre edildiğinde yapılan işlemler).

4. Hiçbir şey yapmamak (ör. son 30 güne ait verileri yeniden okumak ve tekilleştirmeyin)

Bu, yinelenen verilerin görüntülenmesiyle ilişkili olarak son çare olarak kullanılmalıdır. UUID'lerin zaten mevcut olması gerektiği için geliştiriciler bunun yerine 1-3 arasındaki seçenekleri incelemelidir.

Jetpack SDK'sı ile Android 14 API'lerini test etme

Android 14 Jetpack SDK'sı, Android 14'ün Beta 3 sürümüyle birlikte 7 Haziran 2023'te kullanıma sunulacak. Android 14 Jetpack SDK'sını kullanabilmek için uygulamanızı Android 14'e göre derlemeye başlamanız gerekir.

Çözümünüzü 7 Haziran'dan önce Android Geliştirici Önizlemesi derlemeleriyle test etmek isterseniz yardım için Google İOOY'niz ile iletişime geçin.

Çözümünüzü Beta 3 sürümüne göre test etmek istiyorsanız APK'nızda aşağıdaki değişiklikleri yapmanız gerekir:

  1. compileSDKPreview = UpsideDownCake ayarlayın.
  2. Manifest'i, Android 14 için bir amaç içerecek şekilde güncelleyin:
# 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 özelleştirme

Android 14'te Health Connect gizlilik ve veri yönetimi denetimleri Sistem Ayarları'nda yer alır.

Health Connect, veri yönetimi ve izin ekranlarının cihazın bir parçası gibi görünmesini ve hissetmesini sağlamak için özel yer paylaşımları kullanarak OEM teması sunar.

OEM stiliyle ilgili dokümanlar için Health Connect Google Mobile Services dokümanlarına bakın.