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 में डेटा फ़ीड करने के लिए, यह तरीका अपनाएं:
- अपने ऐप्लिकेशन के डेटास्टोर से, नई या अपडेट की गई एंट्री की सूची पाएं.
- हर एंट्री के लिए, उस डेटा टाइप के हिसाब से
Record
ऑब्जेक्ट बनाएं. उदाहरण के लिए, वज़न से जुड़े डेटा के लिएWeightRecord
ऑब्जेक्ट बनाएं. अपने ऐप्लिकेशन के डेटास्टोर से यूनीक कुंजी और वर्शन की जानकारी का इस्तेमाल करके, हर
Record
के साथ एकMetadata
ऑब्जेक्ट तय करें. अगर आपके डेटा का वर्शन नहीं है, तो वैकल्पिक तौर पर मौजूदा टाइमस्टैंप कीLong
वैल्यू का इस्तेमाल किया जा सकता है.val record = WeightRecord( metadata = Metadata( clientRecordId = "<Your record's Client ID>", clientRecordVersion = <Your record's version> ), weight = weight, time = time, zoneOffset = zoneOffset )
insertRecords
का इस्तेमाल करके, Health Connect में डेटा अप्सर्ट करें. डेटा अप्सर्ट करने का मतलब है कि Health Connect में मौजूद कोई भी मौजूदा डेटा तब तक ओवरराइट हो जाता है, जब तक Health Connect डेटास्टोर मेंclientRecordId
वैल्यू मौजूद होती हैं औरclientRecordVersion
मौजूदा वैल्यू से ज़्यादा होती है. ऐसा न होने पर, अप्सर्ट किया गया डेटा, नए डेटा के तौर पर लिखा जाता है.healthConnectClient.insertRecords(arrayListOf(record))
डेटा फ़ीड करने से जुड़ी ज़रूरी बातों के बारे में जानने के लिए, डेटा लिखने के सबसे सही तरीके देखें.
Health Connect आईडी सेव करना
Health Connect में अपने रिकॉर्ड अपटेड करने के बाद, आपके ऐप्लिकेशन के डेटास्टोर को हर रिकॉर्ड के लिए, Health Connect id
को सेव करना होगा. इससे आपके ऐप्लिकेशन को यह पता चलता है कि डेटा खींचने के बाद, हर आने वाले बदलाव के लिए नया रिकॉर्ड बनाना ज़रूरी है या किसी मौजूदा रिकॉर्ड को अपडेट करना.
insertRecords
फ़ंक्शन, id
वैल्यू की सूची वाला एक InsertRecordsResponse
दिखाता है.
रिकॉर्ड आईडी पाने और उन्हें सेव करने के लिए, जवाब का इस्तेमाल करें.
val response = healthConnectClient.insertRecords(arrayListOf(record))
for (recordId in response.recordIdsList) {
// Store recordId to your app's datastore
}
Health Connect से डेटा पाना
सिंक करने की प्रोसेस का दूसरा चरण, Health Connect से आपके ऐप्लिकेशन के डेटास्टोर में डेटा में हुए बदलावों को खींचना है. डेटा में हुए बदलावों में अपडेट और मिटाए गए डेटा शामिल हो सकते हैं.
बदलावों का टोकन पाना
Health Connect से किए गए बदलावों की सूची पाने के लिए, आपके ऐप्लिकेशन को बदलाव टोकन का ट्रैक रखना होगा. बदलाव का अनुरोध करते समय, इनका इस्तेमाल किया जा सकता है. इससे, डेटा में हुए बदलावों की सूची के साथ-साथ, अगली बार इस्तेमाल किए जाने के लिए नया बदलाव टोकन भी मिलता है.
बदलाव टोकन पाने के लिए, 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
DeletionChange
के लिए, रिकॉर्ड को मिटाने के लिए दिए गए id
का इस्तेमाल करें.
Health Connect से डेटा मिटाना
जब कोई उपयोगकर्ता आपके ऐप्लिकेशन से अपना डेटा मिटाता है, तो पक्का करें कि वह डेटा Health Connect से भी हटाया गया हो. ऐसा करने के लिए, deleteRecords
का इस्तेमाल करें. यह फ़ंक्शन, रिकॉर्ड टाइप और id
और clientRecordId
वैल्यू की सूची लेता है. इससे, एक साथ कई डेटा मिटाने में आसानी होती है. timeRangeFilter
का इस्तेमाल करने वाला deleteRecords
विकल्प भी उपलब्ध है.
डेटा सिंक करने के सबसे सही तरीके
सिंक करने की प्रोसेस पर इन बातों का असर पड़ता है.
टोकन की समयसीमा खत्म होना
इस्तेमाल न किए गए बदलाव टोकन की समयसीमा 30 दिनों की होती है. इसलिए, आपको सिंक करने के लिए ऐसी रणनीति का इस्तेमाल करना चाहिए जिससे इस तरह के मामले में जानकारी नष्ट न हो. आपकी रणनीति में ये तरीके शामिल हो सकते हैं:
- अपने ऐप्लिकेशन के डेटास्टोर में, हाल ही में इस्तेमाल किए गए उस रिकॉर्ड को खोजें जिसमें Health Connect का
id
भी शामिल हो. - Health Connect से ऐसे रिकॉर्ड का अनुरोध करें जो किसी खास टाइमस्टैंप से शुरू होते हैं. इसके बाद, उन्हें अपने ऐप्लिकेशन के डेटास्टोर में डालें या अपडेट करें.
- बदलावों के टोकन का अनुरोध करें, ताकि अगली बार ज़रूरत पड़ने पर उसे रिज़र्व किया जा सके.
बदलावों को मैनेज करने के लिए सुझाई गई रणनीतियां
अगर आपके ऐप्लिकेशन को अमान्य या समयसीमा खत्म हो चुके बदलाव टोकन मिल रहे हैं, तो हमारा सुझाव है कि आप अपने लॉजिक में इसके इस्तेमाल के आधार पर, मैनेजमेंट की इन रणनीतियों का इस्तेमाल करें:
- पूरा डेटा पढ़ना और डुप्लीकेट डेटा हटाना. यह सबसे सही रणनीति है.
- Health Connect से आखिरी बार डेटा पढ़ने का टाइमस्टैंप सेव करें.
- टोकन की समयसीमा खत्म होने पर, सबसे हाल के टाइमस्टैंप या पिछले 30 दिनों का सारा डेटा फिर से पढ़ें. इसके बाद, आइडेंटिफ़ायर का इस्तेमाल करके, इसे पहले पढ़े गए डेटा से अलग करें.
- हमारा सुझाव है कि आप Client-ID लागू करें, क्योंकि डेटा अपडेट करने के लिए ये ज़रूरी हैं.
- पिछली बार पढ़े जाने के टाइमस्टैंप के बाद का डेटा ही पढ़ें. इस वजह से, बदलावों के टोकन की समयसीमा खत्म होने के समय डेटा में कुछ अंतर दिख सकता है. हालांकि, यह अंतर कम समय के लिए होता है. इसमें कुछ घंटे से लेकर कुछ दिन लग सकते हैं.
- Health Connect से आखिरी बार डेटा पढ़ने का टाइमस्टैंप सेव करें.
- टोकन की समयसीमा खत्म होने पर, इस टाइमस्टैंप के बाद का सारा डेटा पढ़ें.
- पिछले 30 दिनों का डेटा मिटाएं और फिर उसे पढ़ें. यह पहले इंटिग्रेशन के साथ ज़्यादा मिलता-जुलता है.
- ऐप्लिकेशन ने पिछले 30 दिनों में Health Connect से जो डेटा पढ़ा है उसे मिटाएं.
- मिटाने के बाद, इस डेटा को फिर से पढ़ें.
- डुप्लीकेट कॉपी हटाए बिना, पिछले 30 दिनों का डेटा पढ़ें. यह सबसे सही रणनीति नहीं है. इससे, उपयोगकर्ताओं को डुप्लीकेट डेटा दिखता है.
- ऐप्लिकेशन ने पिछले 30 दिनों में, Health Connect से जो डेटा पढ़ा है उसे मिटाएं.
- डुप्लीकेट एंट्री की अनुमति दें.
डेटा टाइप में बदलाव करने वाले टोकन
अगर आपका ऐप्लिकेशन एक से ज़्यादा डेटा टाइप का इस्तेमाल अलग-अलग करता है, तो हर डेटा टाइप के लिए अलग-अलग बदलाव टोक़न का इस्तेमाल करें. Changes Sync API के साथ, एक से ज़्यादा डेटा टाइप की सूची का इस्तेमाल सिर्फ़ तब करें, जब इन डेटा टाइप का इस्तेमाल एक साथ किया जाता हो या बिलकुल न किया जाता हो.
फ़ोरग्राउंड में पढ़ने की सुविधा
ऐप्लिकेशन, फ़ोरग्राउंड में होने पर ही Health Connect का डेटा पढ़ सकते हैं. Health Connect से डेटा सिंक करते समय, कभी भी Health Connect का ऐक्सेस रुक सकता है. उदाहरण के लिए, Health Connect से ज़्यादा डेटा पढ़ते समय, आपके ऐप्लिकेशन को सिंक के बीच में आने वाली रुकावटों को मैनेज करना होगा. साथ ही, अगली बार ऐप्लिकेशन खोलने पर, सिंक की प्रोसेस जारी रखनी होगी.
बैकग्राउंड में पढ़ने की सुविधा
आपके पास यह अनुरोध करने का विकल्प है कि आपका ऐप्लिकेशन बैकग्राउंड में चलता रहे और Health Connect से डेटा पढ़ता रहे. अगर आपने Background Read
अनुमति का अनुरोध किया है, तो आपका उपयोगकर्ता आपके ऐप्लिकेशन को बैकग्राउंड में डेटा पढ़ने का ऐक्सेस दे सकता है.
इंपोर्ट करने का समय
आपके ऐप्लिकेशन को नए डेटा की सूचना नहीं मिल सकती. इसलिए, दो समय पर नए डेटा की जांच करें:
- जब भी आपका ऐप्लिकेशन फ़ोरग्राउंड में चालू होता है. इस मामले में, लाइफ़साइकल इवेंट का इस्तेमाल करें.
- समय-समय पर, जब आपका ऐप्लिकेशन फ़ोरग्राउंड में हो. नया डेटा उपलब्ध होने पर, उपयोगकर्ताओं को सूचना दें. इससे वे बदलावों को दिखाने के लिए, अपनी स्क्रीन को अपडेट कर पाएंगे.