Verileri senkronize et

Health Connect ile entegre olan çoğu uygulamanın, doğruluk kaynağı olarak hizmet veren kendi veri kümesi vardır. Health Connect, uygulamanızın senkronize kalmasını sağlayacak yöntemler sunar.

Uygulamanızın aşağıdakileri sağladığından emin olun:

  • Uygulamanızın veri deposundaki yeni veya güncellenmiş verileri Health Connect'e besler.
  • Health Connect'ten veri değişikliklerini alır ve uygulamanızın veri deposuna yansıtır.
  • Uygulamanızın veri deposunda silinen veriler Health Connect'ten de silinir.

Her durumda, senkronizasyon işleminin hem Health Connect hem de uygulamanızın veri deposunun uyumlu kalmasını sağlayın.

Health Connect'e veri besleme

Senkronizasyon sürecinin ilk kısmı, uygulamanızın veri deposundaki verileri Health Connect veri deposuna beslemektir.

Verilerinizi hazırlama

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

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

Uygulamanızın veri deposunu, Health Connect'e hangi verilerin aktarıldığını takip edecek şekilde tasarlayın. Bunu yapmak için aşağıdaki mantığı uygulayın:

  • Değişikliklerin listesini ve son jetonun verildiği tarihten sonra güncellenmiş kayıtları almak için kullanılabilecek bir jeton sağlayın.
  • Dışa aktarılan verilerin en son ne zaman değiştirildiğini izleyin.

Bu adımlar, Health Connect'e yalnızca yeni veya güncellenmiş verilerin aktarılmasını sağlamak için gereklidir.

Health Connect'e veri yazma

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

  1. Uygulamanızın veri deposundaki yeni veya güncellenmiş 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. Uygulamanızın veri deposundaki benzersiz anahtarı ve sürüm ayrıntılarını kullanarak her Record için bir Metadata nesnesi belirtin. Verileriniz sürümlendirilmemişse alternatif olarak geçerli zaman damgasının Long değerini kullanabilirsiniz.

    val record = WeightRecord(
        metadata = Metadata(
            clientRecordId = "<Your record's Client ID>",
            clientRecordVersion = <Your record's version>
        ),
        weight = weight,
        time = time,
        zoneOffset = zoneOffset
    )
    
  4. insertRecords kullanarak Health Connect'e veri ekleme. Verileri güncelleme işlemi, clientRecordId değerleri Health Connect veri deposunda bulunduğu ve clientRecordVersion mevcut değerden yüksek olduğu sürece Health Connect'teki mevcut verilerin üzerine yazılacağı anlamına gelir. Aksi takdirde, yeni 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

Kayıtlarınızı Health Connect'e ekledikten sonra uygulamanızın veri deposunun her kayıt için Health Connect id'yi depolaması gerekir. Bu sayede uygulamanız, verileri aldıktan sonra her gelen değişikliğin yeni bir kayıt oluşturmayı veya mevcut bir kaydı güncellemeyi gerektirip gerektirmediğini kontrol edebilir.

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 alma

Senkronizasyon sürecinin ikinci kısmı, Health Connect'teki tüm veri değişikliklerini uygulamanızın veri deposuna çekmek olur. Veri değişiklikleri güncellemeler ve silme işlemlerini içerebilir.

Değişiklik jetonu alma

Health Connect'ten alınacak 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 isterken 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

Bir Değişiklikler jetonu edindiğinize göre tüm Değişiklikleri almak için bu jetonu kullanın. Mevcut veri değişiklikleri olup olmadığını kontrol eden bir döngü oluşturarak tüm değişiklikleri incelemenizi öneririz. Şu adımları uygulayın:

  1. Değişiklikler listesini almak için jetonu kullanarak getChanges işlevini çağırın.
  2. Her değişikliğin UpsertionChange mi yoksa DeletionChange mi olduğunu kontrol edin ve gerekli işlemleri yapın.
    • UpsertionChange için, verileri yeniden içe aktarmadığınızdan emin olmak amacıyla yalnızca çağıran uygulamadan gelmeyen değişiklikleri alın.
  3. 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 gelecekte içe aktarmak 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
}

Verileri almayla ilgili pratik hususlar hakkında bilgi edinmek için Verileri senkronize etme ile ilgili en iyi uygulamalara göz atın.

Veri değişikliklerini işleme

Değişiklikleri uygulamanızın veri deposuna yansıtın. UpsertionChange için, kaydı upsert etmek üzere id ve metadata'daki lastModifiedTime öğesini kullanın. DeletionChange için, kaydı silmek üzere sağlanan id değerini kullanın.

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 simgesini kullanın. Bu işlev, bir kayıt türü ve id ile clientRecordId değerlerinin listesini alır. Bu sayede, birden fazla veriyi toplu olarak silmek kolaylaşır. timeRangeFilter alan alternatif bir deleteRecords de kullanılabilir.

Veri senkronizasyonuyla ilgili en iyi uygulamalar

Senkronizasyon sürecini etkileyen faktörler aşağıda açıklanmıştır.

Jetonun son kullanma tarihi

Kullanılmayan Değişiklikler jetonunun süresi 30 gün içinde dolduğundan, bu tür durumlarda bilgi kaybını önleyen bir senkronizasyon stratejisi kullanmanız gerekir. Stratejinizde aşağıdaki yaklaşımları kullanabilirsiniz:

  • Uygulama veri deposunuzda, Health Connect'ten id içeren ve en son tüketilen kaydı arayın.
  • Health Connect'ten belirli bir zaman damgasıyla başlayan kayıtlar isteyin ve ardından bunları uygulamanızın veri deposuna ekleyin veya güncelleyin.
  • Bir sonraki sefere ihtiyaç duymanız için değişiklikler jetonu isteyin.

Önerilen değişiklikler yönetimi stratejileri

Uygulamanız geçersiz veya süresi dolmuş Değişiklikler jetonları alıyorsa mantığınızda nasıl kullanıldığına bağlı olarak aşağıdaki yönetim stratejilerini öneririz:

  • Tüm verileri okuyup tekilleştirin. Bu en ideal stratejidir.
    • Health Connect'ten son veri okuma işleminin zaman damgasını depolayın.
    • Jetonun süresi dolduğunda, en son zaman damgasından veya son 30 günden itibaren tüm verileri yeniden okuyun. Ardından, tanımlayıcıları kullanarak daha önce okunan verilerle tekilleştirin.
    • Veri güncellemeleri için gerekli olduklarından, ideal olarak Client-ID'leri uygulamanız gerekir.
  • Yalnızca son okuma zaman damgasından sonraki verileri okuyun. Bu durum, değişiklikler jetonunun süresi dolma zamanı civarında bazı veri tutarsızlıklarına neden olur ancak bu süre, birkaç saat ile birkaç gün arasında değişen daha kısa bir süredir.
    • Health Connect'ten son veri okuma işleminin zaman damgasını depolayın.
    • Jeton süresi dolduğunda, bu zaman damgasından itibaren tüm verileri okuyun.
  • Son 30 güne ait verileri silip okuma. Bu, ilk entegrasyonda gerçekleşenle daha uyumludur.
    • Uygulamanın son 30 gün içinde Health Connect'ten okuduğu tüm verileri silin.
    • Sildikten sonra bu verilerin tümünü tekrar okuyun.
  • Son 30 güne ait verileri tekilleştirmeden okuma. 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 silin.
    • 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. Değişiklik Senkronizasyonu API'sinde birden fazla veri türü listesini yalnızca bu veri türleri birlikte tüketiliyorsa veya hiç tüketilmiyorsa kullanın.

Ön planda okuma

Uygulamalar, Health Connect'teki verileri yalnızca ön plandayken okuyabilir. Health Connect'teki veriler senkronize edilirken 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 kesintileri yönetmeli ve uygulama bir sonraki açıldığında devam etmelidir.

Arka planda okuma

Uygulamanızın arka planda çalışmasını ve Health Connect'ten veri okumasını isteyebilirsiniz. Background Read iznini talep ederseniz kullanıcınız, uygulamanıza arka planda veri okuma izni verebilir.

Zamanlamaları içe aktarma

Uygulamanız yeni verilerle ilgili bildirim alamayacağından yeni verileri iki noktada kontrol edin:

  • Uygulamanız ön planda etkinleştirildiğinde. Bu durumda yaşam döngüsü etkinliklerini kullanın.
  • Uygulamanız ön plandayken düzenli aralıklarla Yeni veriler olduğunda kullanıcıları bilgilendirerek ekranlarını değişiklikleri yansıtacak şekilde güncellemelerine olanak tanıyın.