Verileri senkronize et

Bu kılavuz, Health Connect'in 1.1.0-alpha12 sürümüyle uyumludur.

Health Connect ile entegre olan çoğu uygulamanın, doğruluk kaynağı olarak hizmet veren kendi veri deposu vardır. Health Connect, uygulamanızı senkronize tutmanın yollarını sunar.

Senkronizasyon işlemi, uygulamanızın mimarisine bağlı olarak aşağıdaki işlemlerden bazılarını veya tümünü içerebilir:

  • Uygulamanızın veri deposundaki yeni veya güncellenmiş verileri Health Connect'e aktarın.
  • Health Connect'teki veri değişikliklerini uygulamanızın veri deposuna çekin.
  • Uygulamanızın veri deposunda silinen verileri Health Connect'ten silin.

Her durumda, senkronizasyon işleminin hem Health Connect'i hem de uygulamanızın veri deposunu uyumlu tuttuğundan emin olun.

Health Connect'e veri aktarma

Senkronizasyon sürecinin ilk bölümünde, uygulamanızın veri deposundaki veriler Health Connect veri deposuna aktarılır.

Verilerinizi hazırlama

Uygulamanızın veri deposundaki kayıtlar genellikle aşağıdaki ayrıntıları içerir:

  • UUID gibi benzersiz bir anahtar.
  • Sürüm veya zaman damgası.

Verileri Health Connect ile senkronize ederken yalnızca son senkronizasyondan sonra eklenen, güncellenen veya silinen verileri tanımlayın ve aktarın.

Health Connect'e veri yazma

Health Connect'e veri aktarmak için aşağıdaki adımları uygulayın:

  1. Uygulamanızın veri deposundaki yeni, güncellenmiş veya silinmiş girişlerin listesini alın.
  2. Her giriş için söz konusu veri türüne uygun bir Record nesnesi oluşturun. Örneğin, ağırlıkla ilgili veriler için bir WeightRecord nesnesi oluşturun.
  3. Her Record ile bir Metadata nesnesi belirtin. Bu, kaydı benzersiz şekilde tanımlamak için kullanabileceğiniz, uygulamanızın veri deposundaki bir kimlik olan clientRecordId'yı içerir. Bunun için mevcut benzersiz anahtarınızı kullanabilirsiniz. Verileriniz sürüm oluşturma işlemine tabi tutuluyorsa verilerinizde kullanılan sürüm oluşturma işlemiyle uyumlu bir clientRecordVersion de sağlayın. Sürüm oluşturulmamışsa alternatif olarak geçerli zaman damgasının Long değerini kullanabilirsiniz.

    val recordVersion = 0L
    // Specify as needed
    // The clientRecordId is an ID that you choose for your record. This
    // is often the same ID you use in your app's datastore.
    val clientRecordId = "<your-record-id>"
    
    val record = WeightRecord(
        metadata = Metadata.activelyRecorded(
            clientRecordId = clientRecordId,
            clientRecordVersion = recordVersion,
            device = Device(type = Device.TYPE_SCALE)
        ),
        weight = Mass.kilograms(62.0),
        time = Instant.now(),
        zoneOffset = ZoneOffset.UTC,
    )
    healthConnectClient.insertRecords(listOf()(record))
    
    
  4. insertRecords kullanarak Health Connect'e veri ekleme/güncelleme. Veri ekleme/güncelleme işlemi, Health Connect veri deposunda clientRecordId değerleri bulunduğu ve clientRecordVersion değeri mevcut değerden yüksek olduğu sürece Health Connect'teki mevcut verilerin üzerine yazılacağı anlamına gelir. Aksi takdirde, eklenen veriler yeni veri olarak yazılır.

    healthConnectClient.insertRecords(arrayListOf(record))
    

Veri beslemeyle ilgili pratik hususlar hakkında bilgi edinmek için Veri yazma ile ilgili en iyi uygulamalara göz atın.

Health Connect kimliklerini saklama

Uygulamanız Health Connect'ten de veri okuyorsa verileri ekledikten sonra kayıtlar için Health Connect id'ı saklayın. Health Connect'ten veri değişikliklerini çektiğinizde silme işlemlerini gerçekleştirmek için bu id gerekir.

insertRecords işlevi, id değerlerinin listesini içeren bir InsertRecordsResponse döndürür. Kayıt kimliklerini almak ve saklamak için yanıtı kullanın.

val response = healthConnectClient.insertRecords(arrayListOf(record))

for (recordId in response.recordIdsList) {
    // Store recordId to your app's datastore
}

Health Connect'ten veri çekme

Senkronizasyon sürecinin ikinci bölümünde, Health Connect'teki veri değişiklikleri uygulamanızın veri deposuna aktarılır. Veri değişiklikleri güncellemeleri ve silme işlemlerini içerebilir.

Değişiklik jetonu alma

Health Connect'ten çekilecek değişikliklerin listesini almak için uygulamanızın Değişiklikler jetonlarını takip etmesi gerekir. Hem veri değişikliklerinin listesini hem de bir sonraki sefer kullanılacak yeni bir Changes jetonunu döndürmek için Changes isteğinde bulunurken bunları kullanabilirsiniz.

Değişiklikler jetonu almak için getChangesToken işlevini çağırın ve gerekli veri türlerini sağlayın.

val changesToken = healthConnectClient.getChangesToken(
    ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)

Veri değişikliklerini kontrol etme

Artık bir Changes jetonunuz olduğuna göre, tüm Changes öğelerini almak için bu jetonu kullanın. Kullanılabilir veri değişiklikleri olup olmadığını kontrol eden tüm Değişiklikler'i incelemek için bir döngü oluşturmanızı öneririz. Şu adımları uygulayabilirsiniz:

  1. getChanges işlevini jetonu kullanarak çağırıp Değişiklikler listesini alın.
  2. Her değişikliğin türünün UpsertionChange veya DeletionChange olup olmadığını kontrol edin ve gerekli işlemleri yapın.
    • UpsertionChange için, verileri yeniden içe aktarmadığınızdan emin olmak üzere yalnızca arama uygulamasından gelmeyen değişiklikleri yapın.
  3. Bir sonraki Changes jetonunu yeni jetonunuz olarak atayın.
  4. Değişiklik kalmayana kadar 1-3. adımları tekrarlayın.
  5. Sonraki jetonu saklayın ve gelecekteki bir içe aktarma işlemi için ayırın.
suspend fun processChanges(token: String): String {
    var nextChangesToken = token
    do {
        val response = healthConnectClient.getChanges(nextChangesToken)
        response.changes.forEach { change ->
            when (change) {
                is UpsertionChange ->
                    if (change.record.metadata.dataOrigin.packageName != context.packageName) {
                        processUpsertionChange(change)
                    }
                is DeletionChange -> processDeletionChange(change)
            }
        }
        nextChangesToken = response.nextChangesToken
    } while (response.hasMore)
    // Return and store the changes token for use next time.
    return nextChangesToken
}

Veri çekmeyle ilgili pratik hususlar hakkında bilgi edinmek için Verileri senkronize etme ile ilgili en iyi uygulamaları inceleyin.

Veri değişikliklerini işleme

Uygulamanızın veri deposundaki değişiklikleri yansıtın. UpsertionChange için kaydı güncellemek üzere metadata kaynağından id ve lastModifiedTime değerlerini kullanın. DeletionChange için kaydı silmek üzere sağlanan id seçeneğini kullanın. Bunun için Health Connect kimliklerini saklama bölümünde belirtildiği gibi id kaydını saklamış olmanız gerekir.

Health Connect'teki verileri silme

Bir kullanıcı kendi verilerini uygulamanızdan sildiğinde verilerin Health Connect'ten de kaldırıldığından emin olun. Bunu yapmak için deleteRecords kullanın. Bu işlev, kayıt türü ve id ile clientRecordId değerlerinin listesini alır. Bu sayede, silinecek birden fazla veriyi toplu olarak işlemek kolaylaşır. timeRangeFilter alan bir deleteRecords alternatifi de mevcuttur.

Verileri senkronize etmeyle ilgili en iyi uygulamalar

Aşağıdaki faktörler senkronizasyon sürecini etkiler.

Jetonun son kullanma tarihi

Kullanılmayan Changes jetonu 30 gün içinde sona erdiğinden, bu gibi durumlarda bilgi kaybını önleyen bir senkronizasyon stratejisi kullanmanız gerekir. Stratejiniz aşağıdaki yaklaşımları içerebilir:

  • Uygulama veri deponuzda, en son kullanılan ve Health Connect'ten id verisi içeren kaydı arayın.
  • Health Connect'ten belirli bir zaman damgasıyla başlayan kayıtları isteyin, ardından bunları uygulamanızın veri deposuna ekleyin veya güncelleyin.
  • Bir sonraki ihtiyaç duyulduğunda kullanmak üzere ayırmak için değişiklik jetonu isteyin.

Önerilen değişiklik yönetimi stratejileri

Uygulamanız geçersiz veya süresi dolmuş Changes jetonları alıyorsa mantığınızdaki uygulamasına bağlı olarak aşağıdaki yönetim stratejilerini kullanmanızı öneririz:

  • Tüm verileri okuyun ve tekilleştirin. Bu en ideal stratejidir.
    • Uygulamaların Health Connect'ten en son veri okuduğu zamanın zaman damgasını saklar.
    • Jetonun süresi dolduğunda en son zaman damgasından veya son 30 gün içindeki tüm veriler yeniden okunur. Ardından, tanımlayıcıları kullanarak daha önce okunan verilerle tekilleştirin.
    • Veri güncellemeleri için gerekli olduğundan Client-ID'leri uygulamanız önerilir.
  • Yalnızca son okuma zaman damgasından sonraki verileri okuyun. Bu durum, değişiklik jetonunun geçerlilik süresinin dolduğu zamanlarda bazı veri tutarsızlıklarına neden olur ancak bu süre birkaç saatten birkaç güne kadar sürebilir.
    • Uygulamaların Health Connect'ten en son veri okuduğu zamanın zaman damgasını saklar.
    • Jetonun süresi dolduğunda bu zaman damgasından itibaren tüm verileri okur.
  • Son 30 gün içindeki verileri silip okuyun. Bu, ilk entegrasyonda olanlarla daha yakından ilişkilidir.
    • Uygulamanın son 30 gün içinde Health Connect'ten okuduğu tüm verileri silme
    • Silindikten sonra bu verilerin tamamını tekrar okuyun.
  • Son 30 gün içindeki okuma verilerini tekilleştirme olmadan okuyun. Bu, en az ideal stratejidir ve kullanıcılara yinelenen verilerin gösterilmesine neden olur.
    • Uygulamanın son 30 gün içinde Health Connect'ten okuduğu tüm verileri siler.
    • Yinelenen girişlere izin verin.

Veri türü değişiklikleri jetonları

Uygulamanız birden fazla veri türünü bağımsız olarak kullanıyorsa her veri türü için ayrı değişiklik jetonları kullanın. Yalnızca bu veri türleri birlikte kullanılıyorsa veya hiç kullanılmıyorsa Değişiklikleri Senkronize Etme API'si ile birden fazla veri türünün bulunduğu bir liste kullanın.

Ön planda okuma

Uygulamalar, yalnızca ön plandayken Health Connect'teki verileri okuyabilir. Health Connect'ten veri senkronize ederken Health Connect'e erişim herhangi bir noktada kesintiye uğrayabilir. Örneğin, uygulamanız Health Connect'ten büyük miktarda veri okurken senkronizasyonun ortasında meydana gelen kesintileri işlemeli ve uygulama bir sonraki açılışında devam etmelidir.

Arka planda okuma

Uygulamanızın arka planda çalışmasını ve Health Connect'teki verileri okumasını isteyebilirsiniz. Background Read iznini isterseniz kullanıcınız, uygulamanıza arka planda veri okuma erişimi verebilir.

İçe aktarma zamanlamaları

Uygulamanız yeni veriler hakkında bildirim alamadığından yeni verileri iki noktada kontrol edin:

  • Uygulamanız her ön planda etkin hale geldiğinde. Bu durumda, yaşam döngüsü etkinliklerini kullanın.
  • Uygulamanız ön planda kalırken belirli aralıklarla Yeni veriler olduğunda kullanıcıları bilgilendirerek ekranlarını değişiklikleri yansıtacak şekilde güncellemelerine olanak tanır.