همگام سازی داده ها

اکثر برنامه‌هایی که با Health Connect ادغام می‌شوند، ذخیره‌گاه داده خود را دارند که به عنوان منبع حقیقت عمل می‌کند. Health Connect راه هایی برای همگام نگه داشتن برنامه شما ارائه می دهد.

مطمئن شوید که برنامه شما موارد زیر را انجام می دهد:

  • داده های جدید یا به روز شده را از فروشگاه داده برنامه شما به Health Connect تغذیه می کند.
  • تغییرات داده‌ها را از Health Connect که در ذخیره‌گاه داده برنامه شما منعکس می‌شوند، می‌کشد.
  • داده‌ها را از Health Connect حذف می‌کند زمانی که در ذخیره‌گاه داده برنامه شما حذف می‌شوند.

در هر مورد، مطمئن شوید که فرآیند همگام‌سازی، Health Connect و ذخیره‌گاه داده برنامه شما را در یک راستا نگه می‌دارد.

داده ها را به Health Connect بدهید

اولین بخش از فرآیند همگام‌سازی این است که داده‌ها را از ذخیره‌گاه داده برنامه‌تان به ذخیره‌گاه داده‌های Health Connect بدهید.

داده های خود را آماده کنید

معمولاً سوابق موجود در فروشگاه داده برنامه شما دارای جزئیات زیر است:

  • یک کلید منحصر به فرد، مانند یک UUID .
  • نسخه یا مهر زمانی

ذخیره‌گاه داده برنامه خود را طوری طراحی کنید که اطلاعاتی را که قبلاً به Health Connect داده شده است، پیگیری کنید. برای رسیدن به این هدف، منطق زیر را اعمال کنید:

  • فهرستی از تغییرات و رمزی ارائه کنید که بتوان از آن برای بازیابی رکوردهایی استفاده کرد که از زمان آخرین توکن به‌روزرسانی شده‌اند.
  • آخرین باری که داده‌های صادر شده اصلاح شده را پیگیری کنید.

این مراحل برای اطمینان از اینکه فقط داده های جدید یا به روز شده به Health Connect داده می شود ضروری است.

داده ها را در Health Connect بنویسید

برای تغذیه داده ها به Health Connect، مراحل زیر را انجام دهید:

  1. لیستی از ورودی های جدید یا به روز شده را از فروشگاه داده برنامه خود دریافت کنید.
  2. برای هر ورودی، یک شی Record مناسب برای آن نوع داده ایجاد کنید. به عنوان مثال، یک شی WeightRecord برای داده های مربوط به وزن ایجاد کنید.
  3. با استفاده از کلید منحصر به فرد و جزئیات نسخه از فروشگاه داده برنامه خود، یک شی Metadata را با هر Record مشخص کنید. اگر داده‌های شما نسخه‌بندی نشده است، می‌توانید از مقدار Long مهر زمانی فعلی به عنوان جایگزین استفاده کنید.

    val record = WeightRecord(
        metadata = Metadata(
            clientRecordId = "<Your record's Client ID>",
            clientRecordVersion = <Your record's version>
        ),
        weight = weight,
        time = time,
        zoneOffset = zoneOffset
    )
    
  4. با استفاده از insertRecords داده ها را به Health Connect اضافه کنید . اضافه کردن داده به این معنی است که هر داده موجود در Health Connect تا زمانی که مقادیر clientRecordId در Health Connect datastore وجود داشته باشد بازنویسی می شود و clientRecordVersion بالاتر از مقدار موجود است. در غیر این صورت، داده های اضافه شده به عنوان داده جدید نوشته می شود.

    healthConnectClient.insertRecords(arrayListOf(record))
    

برای آشنایی با ملاحظات عملی برای تغذیه داده ها، بهترین روش ها را برای Write data بررسی کنید.

شناسه‌های Health Connect را ذخیره کنید

پس از درج سوابق خود در Health Connect، فروشگاه داده برنامه شما باید id Health Connect را برای هر رکورد ذخیره کند. این به برنامه شما اجازه می‌دهد تا بررسی کند که آیا هر تغییر ورودی نیاز به ایجاد یک رکورد جدید یا به‌روزرسانی یک رکورد موجود دارد یا خیر، پس از اینکه داده‌ها را استخراج کردید.

تابع insertRecords یک InsertRecordsResponse را برمی گرداند که حاوی لیست مقادیر id است. از پاسخ برای دریافت شناسه های رکورد و ذخیره آنها استفاده کنید.

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

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

داده ها را از Health Connect بکشید

بخش دوم فرآیند همگام‌سازی این است که هر گونه تغییر داده را از Health Connect به ذخیره‌گاه داده برنامه خود بکشید. تغییرات داده ها می تواند شامل به روز رسانی و حذف باشد.

یک نشانه تغییرات دریافت کنید

برای دریافت لیستی از تغییراتی که باید از Health Connect انجام دهید، برنامه شما باید نشانه‌های Changes را پیگیری کند. می‌توانید هنگام درخواست تغییرات برای بازگرداندن فهرستی از تغییرات داده‌ها و نشانه‌های تغییرات جدید برای استفاده در دفعات بعدی از آنها استفاده کنید.

برای به دست آوردن نشانه تغییرات ، با getChangesToken تماس بگیرید و انواع داده های مورد نیاز را ارائه دهید.

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

تغییرات داده ها را بررسی کنید

اکنون که یک نشانه Changes به دست آورده اید، از آن برای دریافت همه تغییرات استفاده کنید. ما توصیه می کنیم یک حلقه برای عبور از تمام تغییرات ایجاد کنید، جایی که بررسی می کند آیا تغییرات داده های موجود وجود دارد یا خیر. در اینجا مراحل زیر وجود دارد:

  1. برای بدست آوردن لیستی از تغییرات ، با استفاده از رمز getChanges فراخوانی کنید.
  2. هر تغییر را بررسی کنید که آیا نوع تغییر آن UpsertionChange یا DeletionChange است و عملیات لازم را انجام دهید.
    • برای UpsertionChange ، فقط تغییراتی را انجام دهید که از برنامه تماس گرفته نشده است تا مطمئن شوید که داده‌ها را دوباره وارد نمی‌کنید.
  3. توکن تغییرات بعدی را به عنوان توکن جدید خود اختصاص دهید.
  4. مراحل 1-3 را تکرار کنید تا زمانی که هیچ تغییری باقی نماند.
  5. رمز بعدی را ذخیره کنید و آن را برای واردات آینده رزرو کنید.
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
}

برای آشنایی با ملاحظات عملی برای کشیدن داده، بهترین روش‌ها برای همگام‌سازی داده‌ها را بررسی کنید.

داده های فرآیند تغییر می کند

تغییرات را در فروشگاه داده برنامه خود منعکس کنید. برای UpsertionChange ، از id و lastModifiedTime از metadata آن برای اضافه کردن رکورد استفاده کنید. برای DeletionChange ، id ارائه شده برای حذف رکورد استفاده کنید.

داده ها را از Health Connect حذف کنید

وقتی کاربر داده‌های خود را از برنامه شما حذف می‌کند، مطمئن شوید که داده‌ها از Health Connect نیز حذف شده‌اند . برای این کار از deleteRecords استفاده کنید. این یک نوع رکورد و لیستی از مقادیر id و clientRecordId را می گیرد که باعث می شود چندین داده برای حذف دسته بندی شوند. یک deleteRecords جایگزین که یک timeRangeFilter می گیرد نیز موجود است.

بهترین روش ها برای همگام سازی داده ها

عوامل زیر بر روند همگام سازی تأثیر می گذارد.

انقضای توکن

از آنجایی که یک نشانه تغییر استفاده نشده ظرف 30 روز منقضی می‌شود، باید از یک استراتژی همگام‌سازی استفاده کنید که از از دست دادن اطلاعات در چنین حالتی جلوگیری کند. استراتژی شما می تواند شامل رویکردهای زیر باشد:

  • ذخیره‌گاه داده برنامه‌تان را برای آخرین رکورد مصرف‌شده جستجو کنید که یک id از Health Connect نیز دارد.
  • سوابقی را از Health Connect درخواست کنید که با یک مُهر زمانی خاص شروع می‌شوند و سپس آن‌ها را در فروشگاه داده برنامه خود درج یا به‌روزرسانی کنید.
  • یک نشانه تغییرات درخواست کنید تا آن را برای دفعه بعدی که نیاز دارید رزرو کنید.

استراتژی های مدیریت تغییرات توصیه شده

در صورتی که برنامه شما دارای نشانه های تغییر نامعتبر یا منقضی شده باشد، بسته به کاربرد آن در منطق شما، استراتژی های مدیریتی زیر را توصیه می کنیم:

  • همه داده ها را بخوانید و حذف کنید . این ایده آل ترین استراتژی است.
    • مهر زمانی آخرین باری که داده‌ها را از Health Connect خوانده‌اند ذخیره کنید.
    • در انقضای رمز، همه داده‌ها را از آخرین مهر زمانی یا 30 روز گذشته دوباره بخوانید. سپس، با استفاده از شناسه‌ها، آن را در برابر داده‌های خوانده شده قبلی حذف کنید.
    • در حالت ایده آل، شناسه های مشتری را پیاده سازی کنید زیرا برای به روز رسانی داده ها مورد نیاز هستند.
  • فقط خواندن داده ها از آخرین مهر زمانی خوانده شده است . این منجر به برخی اختلافات داده ها در زمان انقضای نشانه تغییرات می شود، اما دوره زمانی کوتاه تر است که می تواند چند ساعت تا چند روز طول بکشد.
    • مهر زمانی آخرین باری که داده‌ها را از Health Connect خوانده‌اند ذخیره کنید.
    • در انقضای رمز، همه داده‌ها را از این مهر زمانی به بعد بخوانید.
  • اطلاعات 30 روز گذشته را حذف کنید و سپس بخوانید . این با آنچه در اولین ادغام اتفاق می‌افتد هماهنگ‌تر است.
    • تمام داده های خوانده شده توسط برنامه را از Health Connect در 30 روز گذشته حذف کنید.
    • پس از حذف، همه این داده ها را دوباره بخوانید.
  • داده‌های 30 روز گذشته را بدون حذف کردن بخوانید . این کمترین استراتژی ایده آل است و منجر به نمایش داده های تکراری به کاربران می شود.
    • تمام داده های خوانده شده توسط برنامه را از Health Connect در 30 روز گذشته حذف کنید.
    • اجازه ورودی های تکراری

نوع داده توکن ها را تغییر می دهد

اگر برنامه شما بیش از یک نوع داده را به طور مستقل مصرف می کند، برای هر نوع داده از Changes Tokens جداگانه استفاده کنید. فقط در صورتی از لیستی از انواع داده های متعدد با Changes Sync API استفاده کنید که این نوع داده ها با هم مصرف شوند یا اصلاً مصرف نشوند.

پیش زمینه می خواند

برنامه‌ها فقط زمانی می‌توانند داده‌ها را از Health Connect بخوانند که در پیش‌زمینه هستند. هنگام همگام سازی داده ها از Health Connect، دسترسی به Health Connect ممکن است در هر نقطه قطع شود. به عنوان مثال، برنامه شما باید هنگام خواندن مقدار زیادی داده از Health Connect، وقفه‌ها را در میانه‌ی همگام‌سازی کنترل کند و دفعه بعد که برنامه باز شد ادامه دهد.

زمان بندی واردات

از آنجایی که برنامه شما نمی تواند از داده های جدید مطلع شود، داده های جدید را در دو نقطه بررسی کنید:

  • هر بار که برنامه شما در پیش زمینه فعال می شود. در این مورد از رویدادهای چرخه حیات استفاده کنید.
  • به صورت دوره ای، در حالی که برنامه شما در پیش زمینه باقی می ماند. هنگامی که داده‌های جدید در دسترس هستند، به کاربران اطلاع دهید، به آنها اجازه می‌دهد صفحه نمایش خود را برای منعکس کردن تغییرات به‌روزرسانی کنند.