Health Connect, tüketici sağlık verileri için ortak bir veri depolama katmanı olarak Android 14 ile birlikte paketlenecek, ayrıntılı izinlerle korunacak ve Android sistem uygulaması (bu dokümanda "çerçeve" modülü olarak anılacaktır) olarak erişilebilir olacaktır.
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'dan önceki sürümle% 100 özellik eşleşmesini korur.
Android 13'ten 14'e geçiş sırasında kullanıcı deneyiminin mümkün olduğunca sorunsuz ve sezgisel kalması son derece önemlidir.
Bu dokümanda, taşıma planı özetlenmiştir, bazı taşıma senaryosu örnekleri verilmiştir ve Health Connect API'ye erişimi kolaylaştıran Jetpack SDK'sındaki değişiklikler listelenmiştir.
Taşıma planı
- Android 14 kullanıma sunulduğunda Google, Health Connect'i Android sistem uygulaması olarak sunmaya başlayacak.
- Özellik eşleştirmesi sağlandıktan sonra veriler APK'dan doldurulur.
- Tüm giriş noktaları, sistem uygulaması kullanıcı arayüzünü hedefler.
- Veri taşıma işlemi başlar. Taşıma işlemi devam ederken modül API'leri "Taşıma işlemi devam ediyor" durumunda askıya alınır. Bu durum Health Connect kullanıcı arayüzünde de gösterilir.
- 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: Koşu (aralık verileri)
Bir kullanıcı, her gün 1 saat boyunca 10 yıllık çalışma kayıtları topladı. Bu, şu anlama gelir:
- Egzersiz seansı kayıtları: 365 * 10 * 1
- Adımlar: 365 * 10 * 1
- Kalori: 365 * 10 * 1
- Toplam = 365 * 10 * 3 (365 * 30) = 10.150
1 paketin 3.000 kayda eşit olduğu göz önüne alındığında, yukarıdaki verilerin toplamı yaklaşık 4 pakettir.
Dahili testlerimiz, tipik bir paketin eklenmesinin yaklaşık bir saniye sürdüğünü doğruladı. Bu nedenle, yukarıdaki veriler yaklaşık 4 saniyede taşınır.
2. Örnek: Nabız (seri verileri)
Bir kullanıcı 5 yıllık nabız verisi (dakikada bir kayıt oluşturulur) topladı ve toplam 2.628.000 kayıt elde etti.
Parça başına 3.000 kayıt olduğunda veriler 876 parçaya dağıtılır. 1 parçanın eklenmesi yaklaşık bir saniye sürdüğünden veriler 15 dakikadan kısa sürede taşınır.
Önerilen taşıma akışı
Anında taşıma işlemini tercih etmeye karar verdik. Pratikte bu, cihaz Android 14'e yükseltildikten sonra APK'nın minimum kullanıcı müdahalesiyle devre dışı bırakılacağı anlamına gelir.
Taşıma sürecinin genel hatlarını inceleyelim:
- Kullanıcı, cihazını Android 14'e yükseltir.
- Jetpack 14, kullanıcıyı modül API'lerine yönlendirir ve taşıma işlemi devam ederken bunları engeller.
- Taşıma işlemi, modül sürümü APK ile özellik uyumlu olduğunda (yani modül sürümü aynı özellik grubunu veya daha fazlasını içerdiğinde) başlar. Taşıma işlemi başladıktan sonra APK, izinleri ve verileri taşır.
- Her iki sürüm de özellik uyumlu değilse modül sürümünün yükseltilmesi gerekir. Yükseltme işlemi tamamlandıktan sonra taşıma işlemi başlar.
- Taşıma işlemi tamamlandıktan sonra durum "Taşıma Tamamlandı" olarak değiştirilir ve modül API'lerinin engellemesi kaldırılır.
- APK artık kaldırılabilir.
Taşıma kullanıcı arayüzü öğeleri
Kullanıcı eğitimi amacıyla çerçeve modülü tarafından hem taşıma işleminden önce hem de taşıma işlemi sırasında aşağıdaki ekranlar gösterilir:
Şekil 1. Health Connect APK'sı "taşıma bilincine sahip" değilse kullanıcıya APK'yı güncellemesi gerektiğini belirten bir istem gösterilir. Kullanıcı güncellemeyi reddederse modül çalışmaya devam eder ve izinler ile verileri toplamaya başlar:
Şekil 2. Çerçeve modülünün özellik uyumlu hale gelmesi için güncellenmesi gerekiyorsa kullanıcıdan güncellemeyi gerçekleştirip cihazını yeniden başlatması istenir. Kullanıcı güncellemeyi reddederse modül çalışmaya devam eder ve izinler ile verileri toplamaya başlar:
Şekil 3. Taşıma işlemi sırasında, verilerin senkronize edildiğini açıklayan bir metin içeren bir döndürme çubuğu gösterilir:
Tekilleştirilmiş veriler
Çerçeve modülü, herhangi bir taşıma veya bulut tabanlı geri yükleme işlemi önce veri ve izin almaya başladıysa aşağıdaki kurallar geçerlidir.
İzinler
Çerçeve modülünde izinler varsa APK'dan alınan yinelenen izinler taşıma işlemi sırasında yoksayılır.
Veri
Taşıma sırasında APK'dan gelen yinelenen veriler yoksayılır. Modüldeki daha güncel verilere öncelik verilir.
Kayıt kimliği istemci tarafından sağlanırsa veriler clientRecordId
üzerinde tekilleştirilir. Aksi takdirde, uygulamanın veri türü ve paket adıyla birlikte zaman aralıkları (dahili kayıtlar için startTime
ve endTime
, anlık kayıtlar için time
) anahtar olarak değerlendirilir.
Jetpack SDK'sındaki değişiklikler
Jetpack SDK'sı hem Health Connect APK'sı hem de Health Connect çerçeve API'leri için ortak entegrasyon noktası olarak kullanılır.
OEM'ler Jetpack 13 ile entegrasyona başlayabilir. Böylece Jetpack 14 kullanıma sunulduğunda yeni kitaplığı uygun şekilde kullanabilir ve Android 14'te derleyebilirsiniz.
SDK'nın Android 14'e geçişi destekleyen yeni bir sürümünü yayınlayacağız. Sorunsuz bir geçiş sağlamak için mevcut entegrasyonunuzda bazı değişiklikler yapmanız gerekir.
İzin beyanı
Android 13'te izinleri, manifest'e bağlı bir kaynak dosyasında özel bir izin biçimi kullanarak beyan edersiniz:
#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şlemiyle açarsınız.
Android 14'te, Jetpack SDK'sında belirtilen ve üzerinde çalıştığı Android sürümüne göre farklı değerlere sahip bir intent işlemi kullanmanız gerekir:
@get:JvmName("getHealthConnectSettingsAction")
@JvmStatic val
ACTION_HEALTH_CONNECT_SETTINGS
Health Connect istemcisini edinme
Kullanımdan kaldırılan diğer iki API'nin (IsSdkSupported()
ve isProviderAvailable()
) yerine Jetpack 11'de kullanılabilen sdkStatus
adlı tek bir API oluşturduk.
Session-record API'sinde yapılan değişiklikler
Alfa10 sürümü kapsamında dört ExerciseSession
alt türü silindi:
ExerciseEvent
ExerciseLaps
ExerciseRepetitions
SwimmingStrokes
ExerciseSessionRecord
ile olduğu gibi SleepStage
da SleepSession
alt türü olacak.
Hem ExerciseSessionRecord
alt türleri hem de SleepSession
değişiklikleri Nisan ayındaki SDK güncellemesi kapsamında kullanıma sunulacaktır.
Egzersiz seansı türü güncellemesi
Aşağıdaki egzersiz oturumu türleri artık desteklenmeyecek ve yerine segment türleri olarak daha sonra 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üğü işleme
APK'dan Android 14'e geçiş kapsamında değişiklik günlükleri taşınmaz.
Taşıma işlemi tamamlandıktan sonra TOKEN_EXPIRED
veya TOKEN_INVALID
istisnaları almaya başlayacaksınız. Bunlar aşağıdaki yöntemlerle ele alınmalıdır (tercih sırasına göre):
1. "Son okuma" zaman damgasından veya son 30 günden itibaren tüm verileri okuyup tekilleştirin
Bir uygulamanın Health Connect'ten en son ne zaman veri okuduğunun zaman damgasını depolayın. Jetonun süresi dolduğunda veriler bu değerden veya önceki 30 günden (hangisi en az değerse) yeniden okunmalı ve UUID kullanılarak daha önce okunan verilerle tekilleştirilmelidir.
2. "Son okuma" zaman damgasından bu yana verileri okuma
Health Connect'ten verilerin en son ne zaman okunduğunu belirten bir zaman damgası oluşturun ve jetonun süresi dolduktan sonra bu değerden sonra gelen tüm verileri okuyun.
3. Son 30 güne ait verileri silin ve yeniden okuyun
Health Connect'ten önceki 30 gün içinde okunan tüm verileri silin ve bu verilerin tümünü tekrar okuyun (ör. uygulamalar Health Connect ile ilk kez entegre edildiğinde olduğu gibi).
4. Hiçbir şey yapmayın (ör. son 30 güne ait verileri yeniden okuyun ve tekilleştirmeyin)
Bu yöntem, son çare olarak kullanılmalıdır ve yinelenen veri görüntüleme riski vardır. Geliştiriciler, UUID'lerin zaten mevcut olması nedeniyle 1-3 seçeneklerini keşfetmelidir.
Android 14 API'lerini Jetpack SDK'sıyla 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 için derlemeye başlamanız gerekir.
Çözümünüzü 7 Haziran'dan önce Android Geliştirici Önizlemesi sürümleriyle test etmek istiyorsanız yardım için Google ilgili kişinizle 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:
compileSDKPreview = UpsideDownCake
değerini ayarlayın.- Manifest dosyasını Android 14 için bir intent 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ştirmesi
Android 14'te Health Connect gizlilik ve veri yönetimi kontrolleri Sistem Ayarları'nda bulunur.
Health Connect, veri yönetimi ve izin ekranlarının cihazın bir parçası gibi görünmesi ve hissettirmesi için özel yer paylaşımları kullanarak OEM temaları sunar.
OEM stili hakkında dokümanlar için Health Connect Google Mobil Hizmetler dokümanlarına bakın. Sayfayı görüntülemek için Google Developers'a giriş yapmanız gerekebilir.