ডেটা সিঙ্ক্রোনাইজ করুন

হেলথ কানেক্টের সাথে একীভূত হওয়া বেশিরভাগ অ্যাপের নিজস্ব ডেটাস্টোর রয়েছে যা সত্যের উৎস হিসেবে কাজ করে। Health Connect আপনার অ্যাপকে সিঙ্কে রাখার উপায় প্রদান করে।

আপনার অ্যাপ নিম্নলিখিত কাজ করে তা নিশ্চিত করুন:

  • আপনার অ্যাপের ডেটাস্টোর থেকে স্বাস্থ্য সংযোগে নতুন বা আপডেট করা ডেটা ফিড করে।
  • হেলথ কানেক্ট থেকে ডেটা পরিবর্তনগুলি টেনে আনে, যা আপনার অ্যাপের ডেটাস্টোরে প্রতিফলিত হয়।
  • আপনার অ্যাপের ডেটাস্টোরে মুছে ফেলা হলে Health Connect থেকে ডেটা মুছে দেয়।

প্রতিটি ক্ষেত্রে, নিশ্চিত করুন যে সিঙ্কিং প্রক্রিয়াটি Health Connect এবং আপনার অ্যাপের ডেটাস্টোর উভয়ই সারিবদ্ধ রাখে।

স্বাস্থ্য সংযোগে ডেটা ফিড করুন

সিঙ্কিং প্রক্রিয়ার প্রথম অংশ হল আপনার অ্যাপের ডেটাস্টোর থেকে স্বাস্থ্য সংযোগ ডেটাস্টোরে ডেটা ফিড করা।

আপনার ডেটা প্রস্তুত করুন

সাধারণত, আপনার অ্যাপের ডেটাস্টোরের রেকর্ডে নিম্নলিখিত বিবরণ থাকে:

  • একটি অনন্য কী, যেমন একটি UUID
  • একটি সংস্করণ বা টাইমস্ট্যাম্প।

ইতিমধ্যেই Health Connect-এ কোন ডেটা দেওয়া হয়েছে তার ট্র্যাক রাখতে আপনার অ্যাপের ডেটাস্টোর ডিজাইন করুন৷ এটি অর্জন করতে, নিম্নলিখিত যুক্তি প্রয়োগ করুন:

  • পরিবর্তনের একটি তালিকা এবং একটি টোকেন প্রদান করুন যা সর্বশেষ টোকেন জারি হওয়ার পর থেকে আপডেট আছে এমন রেকর্ড পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে।
  • রপ্তানি করা ডেটা পরিবর্তন করা শেষবার ট্র্যাক করুন।

Health Connect-এ শুধুমাত্র নতুন বা আপডেট করা ডেটা দেওয়া হয়েছে তা নিশ্চিত করার জন্য এই পদক্ষেপগুলি অপরিহার্য।

স্বাস্থ্য সংযোগে ডেটা লিখুন

স্বাস্থ্য সংযোগে ডেটা ফিড করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. আপনার অ্যাপের ডেটাস্টোর থেকে নতুন বা আপডেট হওয়া এন্ট্রিগুলির একটি তালিকা পান।
  2. প্রতিটি এন্ট্রির জন্য, সেই ডেটা টাইপের জন্য উপযুক্ত একটি Record অবজেক্ট তৈরি করুন। উদাহরণস্বরূপ, ওজন সম্পর্কিত ডেটার জন্য একটি WeightRecord অবজেক্ট তৈরি করুন।
  3. আপনার অ্যাপের ডেটাস্টোর থেকে অনন্য কী এবং সংস্করণের বিবরণ ব্যবহার করে প্রতিটি 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
    )
    
  4. insertRecords ব্যবহার করে Health Connect-এ ডেটা আপসার্ট করুন । ডেটা আপসার্ট করার মানে হল হেলথ কানেক্ট ডেটাস্টোরে clientRecordId মানগুলি বিদ্যমান থাকা পর্যন্ত স্বাস্থ্য সংযোগে বিদ্যমান যেকোন ডেটা ওভাররাইট হয়ে যায় এবং clientRecordVersion বিদ্যমান মানের থেকে বেশি। অন্যথায়, আপসার্ট করা ডেটা নতুন ডেটা হিসাবে লেখা হয়।

    healthConnectClient.insertRecords(arrayListOf(record))
    

ডেটা খাওয়ানোর জন্য ব্যবহারিক বিবেচনাগুলি সম্পর্কে জানতে, ডেটা লেখার জন্য সর্বোত্তম অনুশীলনগুলি দেখুন।

হেলথ কানেক্ট আইডি স্টোর করুন

স্বাস্থ্য সংযোগে আপনার রেকর্ডগুলি আপসার্ট করার পরে, আপনার অ্যাপের ডেটাস্টোরে প্রতিটি রেকর্ডের জন্য স্বাস্থ্য সংযোগ 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 থেকে পরিবর্তনের একটি তালিকা পেতে, আপনার অ্যাপটিকে পরিবর্তন টোকেনগুলির উপর নজর রাখতে হবে। ডেটা পরিবর্তনের একটি তালিকা এবং পরের বার ব্যবহার করার জন্য একটি নতুন পরিবর্তন টোকেন উভয়ই ফেরত দেওয়ার জন্য পরিবর্তনের অনুরোধ করার সময় আপনি সেগুলি ব্যবহার করতে পারেন।

একটি পরিবর্তন টোকেন পেতে, getChangesToken কল করুন এবং প্রয়োজনীয় ডেটা প্রকার সরবরাহ করুন।

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

ডেটা পরিবর্তনের জন্য পরীক্ষা করুন

এখন আপনি একটি পরিবর্তন টোকেন পেয়েছেন, সমস্ত পরিবর্তন পেতে এটি ব্যবহার করুন৷ আমরা সমস্ত পরিবর্তনগুলি পেতে একটি লুপ তৈরি করার পরামর্শ দিই যেখানে এটি উপলব্ধ ডেটা পরিবর্তন আছে কিনা তা পরীক্ষা করে। এখানে নিম্নলিখিত পদক্ষেপগুলি রয়েছে:

  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 এর জন্য, রেকর্ডটি আপসার্ট করতে এর metadata থেকে id এবং lastModifiedTime ব্যবহার করুন। DeletionChange এর জন্য, রেকর্ড মুছে ফেলার জন্য প্রদত্ত id ব্যবহার করুন।

স্বাস্থ্য সংযোগ থেকে ডেটা মুছুন

যখন কোনও ব্যবহারকারী আপনার অ্যাপ থেকে তাদের নিজস্ব ডেটা মুছে ফেলেন, নিশ্চিত করুন যে ডেটা স্বাস্থ্য সংযোগ থেকেও সরানো হয়েছে। এটি করতে deleteRecords ব্যবহার করুন। এটি একটি রেকর্ডের ধরন এবং id এবং clientRecordId মানগুলির তালিকা নেয়, যা মুছে ফেলার জন্য একাধিক ডেটা ব্যাচ করা সুবিধাজনক করে তোলে। একটি বিকল্প deleteRecords যা timeRangeFilter নেয় রেঞ্জ ফিল্টারও উপলব্ধ।

ডেটা সিঙ্ক করার জন্য সর্বোত্তম অনুশীলন

নিম্নলিখিত কারণগুলি সিঙ্কিং প্রক্রিয়াকে প্রভাবিত করে।

টোকেনের মেয়াদ শেষ

যেহেতু একটি অব্যবহৃত পরিবর্তন টোকেনের মেয়াদ 30 দিনের মধ্যে শেষ হয়ে যায়, তাই আপনাকে অবশ্যই একটি সিঙ্ক কৌশল ব্যবহার করতে হবে যা এই ধরনের ক্ষেত্রে তথ্য হারানো এড়ায়। আপনার কৌশল নিম্নলিখিত পন্থা অন্তর্ভুক্ত করতে পারে:

  • আপনার অ্যাপ ডেটাস্টোরে অতি সম্প্রতি ব্যবহৃত রেকর্ডের জন্য অনুসন্ধান করুন যাতে স্বাস্থ্য সংযোগের একটি id রয়েছে৷
  • Health Connect থেকে রেকর্ডের অনুরোধ করুন যা একটি নির্দিষ্ট টাইমস্ট্যাম্প দিয়ে শুরু হয় এবং তারপর সেগুলিকে আপনার অ্যাপের ডেটাস্টোরে ঢোকান বা আপডেট করুন।
  • পরবর্তী সময়ের জন্য এটি সংরক্ষণ করার জন্য একটি পরিবর্তন টোকেনের অনুরোধ করুন।

প্রস্তাবিত পরিবর্তন ব্যবস্থাপনা কৌশল

যদি আপনার অ্যাপটি অবৈধ বা মেয়াদোত্তীর্ণ পরিবর্তন টোকেন পেয়ে থাকে, আমরা আপনার যুক্তিতে এটির প্রয়োগের উপর নির্ভর করে নিম্নলিখিত ব্যবস্থাপনা কৌশলগুলি সুপারিশ করি:

  • সমস্ত ডেটা পড়ুন এবং অনুমান করুন । এটি সবচেয়ে আদর্শ কৌশল।
    • হেলথ কানেক্ট থেকে তারা শেষবারের মতো ডেটা পড়ার টাইমস্ট্যাম্প সংরক্ষণ করুন।
    • টোকেনের মেয়াদ শেষ হলে, সাম্প্রতিক টাইমস্ট্যাম্প বা গত 30 দিনের সমস্ত ডেটা পুনরায় পড়ুন। তারপর, শনাক্তকারী ব্যবহার করে পূর্বে পড়া ডেটার বিপরীতে এটি অনুমান করুন।
    • আদর্শভাবে, ক্লায়েন্ট আইডিগুলি প্রয়োগ করুন যেহেতু সেগুলি ডেটা আপডেটের জন্য প্রয়োজনীয়।
  • শেষ পঠিত টাইমস্ট্যাম্প থেকে শুধুমাত্র ডেটা পড়ুন । এর ফলে পরিবর্তনের টোকেনের মেয়াদ শেষ হওয়ার সময় কিছু ডেটার অসঙ্গতি দেখা দেয়, তবে সময়কাল কম যা কয়েক ঘণ্টা থেকে কয়েক দিন সময় নিতে পারে।
    • হেলথ কানেক্ট থেকে তারা শেষবারের মতো ডেটা পড়ার টাইমস্ট্যাম্প সংরক্ষণ করুন।
    • টোকেনের মেয়াদ শেষ হলে, এই টাইমস্ট্যাম্প থেকে সমস্ত ডেটা পড়ুন।
  • মুছুন তারপর গত 30 দিনের ডেটা পড়ুন । এটি প্রথম ইন্টিগ্রেশনে যা ঘটে তার সাথে আরও ঘনিষ্ঠভাবে সারিবদ্ধ করে।
    • Health Connect থেকে গত 30 দিনের জন্য অ্যাপ দ্বারা পড়া সমস্ত ডেটা মুছুন৷
    • একবার মুছে ফেলা হলে, এই সমস্ত ডেটা আবার পড়ুন।
  • ডিউপিং ছাড়াই গত 30 দিনের ডেটা পড়ুন । এটি সর্বনিম্ন আদর্শ কৌশল, এবং এর ফলে ব্যবহারকারীদের কাছে ডুপ্লিকেট ডেটা প্রদর্শিত হয়।
    • Health Connect থেকে গত 30 দিনের জন্য অ্যাপ দ্বারা পড়া সমস্ত ডেটা মুছুন৷
    • ডুপ্লিকেট এন্ট্রির অনুমতি দিন।

ডেটা টাইপ টোকেন পরিবর্তন করে

যদি আপনার অ্যাপ স্বাধীনভাবে একাধিক ডেটা টাইপ ব্যবহার করে, তাহলে প্রতিটি ডেটা টাইপের জন্য আলাদা পরিবর্তন টোকেন ব্যবহার করুন। শুধুমাত্র পরিবর্তন সিঙ্ক API এর সাথে একাধিক ডেটা প্রকারের একটি তালিকা ব্যবহার করুন যদি এই ডেটা টাইপগুলি একসাথে ব্যবহার করা হয় বা একেবারেই না হয়৷

ফোরগ্রাউন্ড পড়ে

অ্যাপগুলি অগ্রভাগে থাকাকালীন শুধুমাত্র Health Connect থেকে ডেটা পড়তে পারে৷ Health Connect থেকে ডেটা সিঙ্ক করার সময়, Health Connect-এ অ্যাক্সেস যে কোনো সময়ে ব্যাহত হতে পারে। উদাহরণস্বরূপ, Health Connect থেকে প্রচুর পরিমাণে ডেটা পড়ার সময় আপনার অ্যাপটিকে অবশ্যই একটি সিঙ্কের মধ্য দিয়ে বাধাগুলি পরিচালনা করতে হবে এবং পরের বার অ্যাপটি খোলার সময় চালিয়ে যেতে হবে।

আমদানি সময়

যেহেতু আপনার অ্যাপটি নতুন ডেটার বিজ্ঞপ্তি পেতে পারে না, তাই দুটি পয়েন্টে নতুন ডেটা পরীক্ষা করুন:

  • প্রতিবার আপনার অ্যাপ অগ্রভাগে সক্রিয় হয়ে ওঠে। এই ক্ষেত্রে, জীবনচক্র ইভেন্ট ব্যবহার করুন।
  • পর্যায়ক্রমে, যখন আপনার অ্যাপটি অগ্রভাগে থাকে। নতুন ডেটা উপলব্ধ হলে ব্যবহারকারীদের অবহিত করুন, তাদের পরিবর্তনগুলি প্রতিফলিত করতে তাদের স্ক্রীন আপডেট করার অনুমতি দেয়।