Verileri senkronize et

Health Connect ile entegre olan çoğu uygulamanın kendi veri deposu vardır. bilgi kaynağı işlevi görür. Health Connect, uygulamanızı kullanmaya devam etmenizi sağlayacak yöntemler sunar senkronize edilir.

Uygulamanızın şunları yaptığından emin olun:

  • Uygulamanızın veri deposundaki yeni veya güncellenmiş verileri Health Connect'e aktarır.
  • Health Connect'teki veri değişikliklerini alır ve bunlar uygulamanın veri deposundan.
  • Uygulamanızın veri deposundan silindikten sonra Health Connect'teki veriler silinir.

Her durumda, senkronizasyon işleminin hem Health Connect hem de Health Connect ile uyumlu hale getirmiş olursunuz.

Health Connect'e veri feed'i verileri

Senkronizasyon sürecinin ilk bölümü, uygulamanızın veri deposundan veri feed'i oluşturmaktır gönderir.

Verilerinizi hazırlama

Uygulamanızın veri deposundaki kayıtlar genellikle aşağıdaki ayrıntılara sahiptir:

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

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

  • Değişikliklerin listesini ve kayıtları almak için kullanılabilecek bir jeton sağlayın ve Google Analytics 4'te yeni bir sekme açılır.
  • Dışa aktarılan verilerin en son ne zaman değiştirildiğini izleyin.

Bu adımlar, yalnızca yeni veya güncellenen verilerin Health Connect.

Health Connect'e veri yazma

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

  1. Uygulamanızın veri deposundan 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. Benzersiz anahtarı ve her bir Record ile bir Metadata nesnesi belirtin. uygulamanızın veri deposundaki sürüm ayrıntıları Verilerinizde sürüm oluşturulmamışsa 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. Verileri Health Connect'e yükselt insertRecords. Verilerin yükseltilmesi, mevcut tüm clientRecordId olduğu sürece Health Connect'teki verilerin üzerine yazılır. değerleri Health Connect veri deposunda ve clientRecordVersion mevcut değerden daha yüksek. Aksi takdirde, düzeltilen veriler yeni veri olarak kabul edilir.

    healthConnectClient.insertRecords(arrayListOf(record))
    

Veri feed'iyle ilgili pratik konuları öğrenmek için, Veri yazma ile ilgili en iyi uygulamaları inceleyin.

Health Connect kimliklerini depolama

Kayıtlarınız Health Connect'e eklendikten sonra uygulamanızın veri deposunun şunları yapması gerekir: Her kayıt için Health Connect id depolama alanı kullanılır. Bu sayede uygulamanız, gelen her değişiklik yeni bir kayıt oluşturulmasını gerektiriyorsa veya güncelleme işlemini tekrarlamanız gerekir.

insertRecords işlevi, id değerin listesini içeren InsertRecordsResponse. Yanıtı kullanarak Kayıt Kimliklerini alın ve depolayı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 bölümü ise, bir senkronizasyondaki veri değişikliklerini Health Connect, uygulamanızın veri deposuna bağlanır. Veri değişiklikleri, güncellemeler ve silme sayısı.

Değişiklik jetonu alma

Health Connect'ten alınacak değişikliklerin listesini almak için uygulamanızın Değişiklik jetonları takibi Aşağıdakiler üzerinde Değişiklik isteğinde bulunurken bunları kullanabilirsiniz: hem veri değişikliklerinin bir listesini hem de sonrasında kullanılacak yeni bir Değişiklikler jetonu döndürür gerekir.

Değişiklik jetonu almak için getChangesToken numaralı telefonu arayın ve sağlamalısınız.

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

Veri değişikliklerini kontrol etme

Artık bir Değişiklik jetonu aldığınıza göre bu jetonu kullanarak tüm değişiklikleri alabilirsiniz. Tüm Değişikliklerin üzerinden geçmek için bir döngü oluşturmanızı öneririz. mevcut veri değişiklikleri olup olmadığını gösterir. Şu adımları uygulayın:

  1. Aşağıdakilerin listesini almak için jetonu kullanarak getChanges numaralı telefonu arayın Değişiklikler.
  2. Her değişikliği, değişiklik türüne uygun olup olmadığını UpsertionChange veya DeletionChange ve gerekli işlemleri gerçekleştirir.
    • UpsertionChange için yalnızca sesli arama uygulamasını kontrol edin.
  3. Bir sonraki Changes jetonunu yeni jetonunuz olarak atayın.
  4. Başka değişiklik kalmayana kadar 1-3 arasındaki adımları tekrarlayın.
  5. Bir sonraki jetonu depolayı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 Verilerin senkronizasyonuyla 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 id kullanın ve lastModifiedTime, metadata noktasından üst kaydına geldi. DeletionChange için, kaydı silmek üzere sağlanan id değerini kullanın.

Health Connect'ten veri silme

Bir kullanıcı kendi verilerini uygulamanızdan sildiğinde, bu verilerin ayrıca Health Connect'ten de kaldırılmıştır. deleteRecords kullanın yardımcı oluyorum. Bu, bir kayıt türü ile id ve clientRecordId listesini alır değerleri toplu hale getirmeyi kolaylaştırır. timeRangeFilter gerektiren alternatif deleteRecords mevcuttur.

Verileri senkronize etmek için en iyi uygulamalar

Aşağıdaki faktörler senkronizasyon işlemini etkiler.

Jetonun son kullanma tarihi

Kullanılmayan bir Changes jetonunun süresi 30 gün içinde sona ereceğinden senkronizasyon yapmanız gerekir bilgi kaybını önleyen bir strateji kullanın. Stratejiniz şu yaklaşımlardan bahsedeceğiz:

  • Uygulamanızın veri deposunda, en son kullanılan ve aynı zamanda Health Connect'ten bir id var.
  • Health Connect'ten belirli bir değerle başlayan kayıtları isteme ve bunları uygulamanızın veri deposuna ekleyin veya güncelleyin.
  • Bir dahaki sefere ihtiyacınız olduğunda rezerve etmek için bir Değişiklik jetonu isteyin.

Önerilen Değişiklik yönetimi stratejileri

Uygulamanız geçersiz veya süresi dolmuş Değişiklikler jetonları alıyorsa aşağıdaki proje yönetimi stratejilerinin kullanılması önerilir. mantığınız:

  • Tüm verileri okuma ve tekilleştirme. Bu en ideal stratejidir.
    • Çocuğunuzun Health Connect'ten en son ne zaman veri okuduğunu gösteren zaman damgasını depolayın.
    • Jeton geçerlilik süresi sona erdiğinde, en son zaman damgasındaki veya son 30 gün içinde gösterilir. Ardından, şunu kullanarak bu verileri daha önce okunmuş verilerle tekilleştirin: tanımlayıcılar.
    • Veri güncellemeleri için gerekli olduğundan bu kimlikleri tercih etmeniz önerilir.
  • Yalnızca son okuma zaman damgasından bu yana okunan veriler. Bu, bazı verilerle sonuçlanır geçerlilik süresinin dolmasına yakın bir farkla, birkaç saat ile birkaç gün arasında sürece daha kısa olabilir.
    • Çocuğunuzun Health Connect'ten en son ne zaman veri okuduğunu gösteren zaman damgasını depolayın.
    • Jeton sona erdiğinde, bu zaman damgasından sonraki tüm verileri okuyun.
  • Silin, ardından son 30 güne ait verileri okuyun. Bu, şirkete daha ilk entegrasyonda ne olduğuna bakalım.
    • Son 30 gün içinde uygulamanın Health Connect'ten okuduğu tüm verileri siler gün.
    • Silindikten sonra tüm bu verileri tekrar okuyun.
  • Tekilleştirme yapmadan son 30 güne ait verileri okuma. Bu en az ideal stratejisidir ve kullanıcılara yinelenen veriler gösterilmektedir.
    • Uygulamanın okuduğu tüm veriler Health Connect'ten şunun için silinir: son 30 gün.
    • Yinelenen girişlere izin verin.

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

Uygulamanız bağımsız olarak birden fazla veri türü tüketiyorsa Her veri türüne ait jetonlar. Yalnızca Bu veri türleri birlikte kullanılırsa veya hiç tüketilmezse Sync API'sini değiştirir.

Ön plan okumaları

Uygulamalar yalnızca ön plandayken Health Connect'teki verileri okuyabilir. Health Connect'teki veriler senkronize edilirken Health Connect'e erişim herhangi bir noktada kesilebilir. Örneğin, uygulamanız kesintilere elverişli olmalıdır. senkronizasyonun ortasındayken, Health Connect'ten yüksek miktarda veri ve uygulama tekrar açıldığında devam edin.

İçe aktarma zamanlamaları

Uygulamanız yeni verilerden haberdar olamayacağı için yeni verileri iki noktada kontrol edin:

  • Uygulamanız ön planda her etkin hale geldiğinde. Bu durumda, yaşam döngüsü olayları.
  • Uygulamanız ön planda kaldığında düzenli olarak. Kullanıcıları şu durumlarda bilgilendir: Bu da ekranlarını, kullandıkları mesajı yansıtacak şekilde anlamına gelir.