اکثر برنامههایی که با Health Connect ادغام میشوند، پایگاه داده مخصوص به خود را دارند که به عنوان منبع اطلاعات عمل میکند. Health Connect روشهایی را برای همگامسازی برنامه شما فراهم میکند.
بسته به معماری برنامه شما، فرآیند همگامسازی ممکن است شامل برخی یا همه اقدامات زیر باشد:
- دادههای جدید یا بهروز شده را از پایگاه داده برنامه خود به Health Connect ارسال کنید.
- تغییرات دادهها را از Health Connect به پایگاه داده برنامه خود منتقل کنید.
- وقتی دادهها از فروشگاه داده برنامه شما حذف شدند، آنها را از Health Connect حذف کنید.
در هر مورد، مطمئن شوید که فرآیند همگامسازی، هم Health Connect و هم پایگاه داده برنامه شما را هماهنگ نگه میدارد.
دادهها را به Health Connect ارسال کنید
اولین بخش از فرآیند همگامسازی، ارسال دادهها از پایگاه داده برنامه شما به پایگاه داده Health Connect است.
دادههای خود را آماده کنید
معمولاً رکوردهای موجود در پایگاه داده برنامه شما دارای جزئیات زیر هستند:
- یک کلید منحصر به فرد، مانند
UUID
. - یک نسخه یا مهر زمانی.
هنگام همگامسازی دادهها با Health Connect، فقط دادههایی را که از آخرین همگامسازی وارد، بهروزرسانی یا حذف شدهاند، شناسایی و وارد کنید.
نوشتن دادهها در Health Connect
برای وارد کردن دادهها به Health Connect، مراحل زیر را انجام دهید:
- فهرستی از ورودیهای جدید، بهروزرسانیشده یا حذفشده را از پایگاه داده برنامه خود دریافت کنید.
- برای هر ورودی، یک شیء
Record
متناسب با آن نوع داده ایجاد کنید. برای مثال، یک شیءWeightRecord
برای دادههای مربوط به وزن ایجاد کنید. برای هر
Record
یک شیءMetadata
مشخص کنید. این شاملclientRecordId
میشود که یک شناسه از پایگاه داده برنامه شماست و میتوانید از آن برای شناسایی منحصر به فرد رکورد استفاده کنید. میتوانید از کلید منحصر به فرد موجود خود برای این کار استفاده کنید. اگر دادههای شما نسخهبندی شدهاند، یکclientRecordVersion
نیز ارائه دهید که با نسخهبندی استفاده شده در دادههای شما همسو باشد. اگر نسخهبندی نشده است، میتوانید از مقدارLong
مربوط به timestamp فعلی به عنوان جایگزین استفاده کنید.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))
با استفاده از
insertRecords
دادهها را به Health Connect اضافه کنید . اضافه کردن دادهها به این معنی است که هر داده موجود در Health Connect تا زمانی که مقادیرclientRecordId
در datastore Health Connect وجود داشته باشد وclientRecordVersion
بالاتر از مقدار موجود باشد، رونویسی میشود. در غیر این صورت، دادههای اضافه شده به عنوان داده جدید نوشته میشوند.healthConnectClient.insertRecords(arrayListOf(record))
برای آشنایی با ملاحظات عملی برای تغذیه دادهها، بهترین شیوهها برای نوشتن دادهها را بررسی کنید.
شناسههای فروشگاه Health Connect
اگر برنامه شما دادهها را از Health Connect نیز میخواند، id
Health Connect را برای رکوردها پس از درج آنها ذخیره کنید. برای پردازش حذفها هنگام دریافت تغییرات دادهها از Health Connect به این id
نیاز دارید.
تابع 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 را پیگیری کند. میتوانید هنگام درخواست Changes از آنها برای بازگرداندن لیستی از تغییرات دادهها و یک توکن Changes جدید که دفعه بعد استفاده خواهد شد، استفاده کنید.
برای دریافت توکن تغییرات ، getChangesToken
را فراخوانی کنید و انواع دادههای مورد نیاز را ارائه دهید.
val changesToken = healthConnectClient.getChangesToken(
ChangesTokenRequest(recordTypes = setOf(WeightRecord::class))
)
بررسی تغییرات دادهها
اکنون که توکن تغییرات را دریافت کردهاید، از آن برای دریافت همه تغییرات استفاده کنید. توصیه میکنیم یک حلقه ایجاد کنید تا همه تغییرات را بررسی کند و بررسی کند که آیا تغییرات دادهای موجود است یا خیر. مراحل زیر را دنبال کنید:
- برای دریافت لیستی از تغییرات،
getChanges
با استفاده از توکن فراخوانی کنید. - هر تغییر را بررسی کنید که آیا نوع آن
UpsertionChange
است یاDeletionChange
، و عملیات لازم را انجام دهید.- برای
UpsertionChange
، فقط تغییراتی را اعمال کنید که از برنامه فراخوانی کننده نیامده باشند تا مطمئن شوید که دادهها را دوباره وارد نمیکنید.
- برای
- توکن تغییرات بعدی را به عنوان توکن جدید خود اختصاص دهید.
- مراحل ۱ تا ۳ را تا زمانی که هیچ تغییری باقی نمانده باشد، تکرار کنید.
- توکن بعدی را ذخیره کنید و آن را برای واردات بعدی رزرو کنید.
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
آن برای upsert کردن رکورد استفاده کنید. برای DeletionChange
، از id
ارائه شده برای حذف رکورد استفاده کنید. این امر مستلزم آن است که id
رکورد را همانطور که در Store Health Connect IDs ذکر شده است، ذخیره کرده باشید.
حذف دادهها از Health Connect
وقتی کاربری دادههای خود را از برنامه شما حذف میکند، مطمئن شوید که دادهها از Health Connect نیز حذف میشوند . برای انجام این کار deleteRecords
استفاده کنید. این تابع یک نوع رکورد و لیستی از مقادیر id
و clientRecordId
را دریافت میکند که حذف دستهای چندین داده را آسان میکند. یک deleteRecords
جایگزین که یک timeRangeFilter
را دریافت میکند نیز موجود است.
بهترین روشها برای همگامسازی دادهها
عوامل زیر بر روند همگامسازی تأثیر میگذارند.
انقضای توکن
از آنجایی که یک توکن Changes استفاده نشده ظرف 30 روز منقضی میشود، شما باید از یک استراتژی همگامسازی استفاده کنید که از دست رفتن اطلاعات در چنین مواردی جلوگیری کند. استراتژی شما میتواند شامل رویکردهای زیر باشد:
- در پایگاه داده برنامه خود، جدیدترین رکورد مصرفشده که دارای
id
Health Connect نیز هست را جستجو کنید. - از Health Connect رکوردهایی را درخواست کنید که با یک مهر زمانی خاص شروع میشوند و سپس آنها را در مخزن داده برنامه خود وارد یا بهروزرسانی کنید.
- برای رزرو توکن تغییرات (Changes token) برای دفعهی بعدی که به آن نیاز دارید، درخواست دهید.
استراتژیهای پیشنهادی مدیریت تغییرات
در صورتی که توکنهای تغییرات برنامه شما نامعتبر یا منقضی شده باشند، بسته به کاربرد آن در منطق شما، استراتژیهای مدیریتی زیر را توصیه میکنیم:
- تمام دادهها را بخوانید و حذف کنید . این ایدهآلترین استراتژی است.
- مهر زمانی آخرین باری که آنها داده ها را از Health Connect می خوانند، ذخیره کنید.
- در زمان انقضای توکن، تمام دادهها را از آخرین برچسب زمانی یا برای ۳۰ روز گذشته دوباره بخوانید. سپس، آن را با استفاده از شناسهها در برابر دادههای خوانده شده قبلی dedupe کنید.
- در حالت ایدهآل، شناسههای کلاینت را پیادهسازی کنید زیرا برای بهروزرسانی دادهها مورد نیاز هستند.
- فقط دادههای بعد از آخرین برچسب زمانی خوانده شده را بخوانید . این منجر به برخی اختلافات دادهای در حدود زمان انقضای توکن Changes میشود، اما دوره زمانی کوتاهتر است و میتواند از چند ساعت تا چند روز طول بکشد.
- مهر زمانی آخرین باری که آنها داده ها را از Health Connect می خوانند، ذخیره کنید.
- در زمان انقضای توکن، تمام دادهها از این برچسب زمانی به بعد خوانده میشوند.
- دادههای ۳۰ روز گذشته را حذف و سپس بخوانید . این روش با آنچه در اولین ادغام اتفاق میافتد، همسوتر است.
- تمام دادههای خوانده شده توسط برنامه از Health Connect را در 30 روز گذشته حذف کنید.
- پس از حذف، تمام این دادهها را دوباره بخوانید.
- خواندن دادههای ۳۰ روز گذشته بدون حذف دادههای تکراری . این استراتژی ایدهآل نیست و منجر به نمایش دادههای تکراری به کاربران میشود.
- تمام دادههای خوانده شده توسط برنامه از Health Connect را در 30 روز گذشته حذف کنید.
- اجازه ورود ورودیهای تکراری.
نوع داده، توکنها را تغییر میدهد
اگر برنامه شما بیش از یک نوع داده را به طور مستقل مصرف میکند، برای هر نوع داده از توکنهای تغییر جداگانه استفاده کنید. فقط در صورتی از لیستی از چندین نوع داده با API همگامسازی تغییرات استفاده کنید که این انواع داده یا با هم مصرف میشوند یا اصلاً مصرف نمیشوند.
پیشزمینه خوانده میشود
برنامهها فقط میتوانند دادههای Health Connect را در حالی که در پیشزمینه هستند بخوانند. هنگام همگامسازی دادهها از Health Connect، دسترسی به Health Connect ممکن است در هر نقطهای قطع شود. به عنوان مثال، برنامه شما باید هنگام خواندن حجم زیادی از دادهها از Health Connect، وقفهها را در اواسط همگامسازی مدیریت کند و دفعه بعد که برنامه باز میشود، ادامه دهد.
پیشینه خوانده شده
شما میتوانید درخواست کنید که برنامه شما در پسزمینه اجرا شود و دادهها را از Health Connect بخواند. اگر مجوز Background Read
درخواست کنید، کاربر شما میتواند به برنامه شما اجازه دهد تا در پسزمینه دادهها را بخواند.
زمانبندیهای واردات
از آنجایی که برنامه شما نمیتواند از دادههای جدید مطلع شود، دادههای جدید را در دو مرحله بررسی کنید:
- هر بار که برنامه شما در پیشزمینه فعال میشود. در این حالت، از رویدادهای چرخه عمر استفاده کنید.
- به صورت دورهای، در حالی که برنامه شما در پیشزمینه است. هنگامی که دادههای جدید در دسترس قرار گرفت، به کاربران اطلاع دهید و به آنها اجازه دهید صفحه نمایش خود را بهروزرسانی کنند تا تغییرات را منعکس کنند.