আচরণে পরিবর্তন: সব অ্যাপ

Android 13 প্ল্যাটফর্মে এমন কিছু আচরণগত পরিবর্তন করা হয়েছে যা আপনার অ্যাপকে প্রভাবিত করতে পারে। targetSdkVersion নির্বিশেষে, Android 13-এ রান করার সময় নিম্নলিখিত আচরণগত পরিবর্তনগুলি সব অ্যাপের ক্ষেত্রে প্রযোজ্য হয়। আপনার অ্যাপ পরীক্ষা করে দেখা উচিত এবং যেখানে প্রযোজ্য সেখানে এগুলি সঠিকভাবে কাজ করার জন্য প্রয়োজন অনুযায়ী এটি পরিবর্তন করা উচিত।

এছাড়াও, Android 13-কে টার্গেট করা অ্যাপকে প্রভাবিত করে এমন আচরণগত পরিবর্তনের তালিকা পর্যালোচনা করতে ভুলবেন না।

পারফর্ম্যান্স ও ব্যাটারি

টাস্ক ম্যানেজার

বিজ্ঞপ্তি ড্রয়ারের নিচে একটি বোতাম আছে যা বর্তমানে ব্যাকগ্রাউন্ডে চলা অ্যাপের
  সংখ্যা দেখায়। আপনি এই বোতামটি
  প্রেস করলে, একটি ডায়ালগ বক্স দেখা যায় যেখানে বিভিন্ন অ্যাপের নামের তালিকা থাকে। প্রতিটি অ্যাপের ডানদিকে
  'বন্ধ করুন' বোতামটি থাকে
ছবি ১. টাস্ক ম্যানেজারের জন্য ওয়ার্কফ্লো , যা ব্যবহারকারীদের চলমান ফোরগ্রাউন্ড সার্ভিস সহ অ্যাপ বন্ধ করার অনুমতি দেয়। এই ওয়ার্কফ্লো শুধুমাত্র Android 13 বা তার পরবর্তী যেকোনও ভার্সনে রান করা ডিভাইসে দেখা যায়।

Android ১৩ (API লেভেল ৩৩) থেকে শুরু করে, ব্যবহারকারীরা বিজ্ঞপ্তি ড্রয়ার থেকে একটি ওয়ার্কফ্লো সম্পূর্ণ করতে পারবেন, যাতে চলমান ফোরগ্রাউন্ড পরিষেবা আছে এমন অ্যাপ বন্ধ করা যায়, যেমনটি ছবি ১-এ দেখানো হয়েছে। এই অ্যাফর্ডেন্সকে টাস্ক ম্যানেজার বলা হয়। অ্যাপকে অবশ্যই ব্যবহারকারীর দ্বারা শুরু করা এই বন্ধ করার প্রক্রিয়া ম্যানেজ করতে হবে।

JobScheduler ব্যবহার করে প্রিফেচ জব হ্যান্ডলিং উন্নত করুন

JobScheduler অ্যাপকে নির্দিষ্ট কাজকে "প্রিফেচ" কাজ হিসেবে চিহ্নিত করার উপায় প্রদান করে (JobInfo.Builder.setPrefetch() ব্যবহার করে), যার অর্থ হল ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে, পরবর্তী অ্যাপ লঞ্চের কাছাকাছি এবং তার আগে এগুলি আদর্শভাবে চালানো উচিত। ঐতিহাসিকভাবে, JobScheduler শুধুমাত্র প্রিফেচ জবকে সুযোগ বুঝে ফ্রি বা অতিরিক্ত ডেটা ব্যবহার করতে দেওয়ার জন্য সিগন্যাল ব্যবহার করেছে।

Android ১৩ (API লেভেল ৩৩) এবং তার পরবর্তী ভার্সনে, সিস্টেম পরবর্তী সময়ে কোনও অ্যাপ কখন লঞ্চ করা হবে তা নির্ধারণ করার চেষ্টা করে এবং প্রিফেচ কাজ চালানোর জন্য সেই অনুমান ব্যবহার করে। অ্যাপের পরবর্তী লঞ্চের আগে কোনও কাজ সম্পূর্ণ করতে চাইলে, অ্যাপের উচিত প্রিফেচ জব ব্যবহার করার চেষ্টা করা।

ব্যাটারি রিসোর্স ব্যবহার

Android 13 (API লেভেল 33) সিস্টেমের জন্য নিম্নলিখিত উপায়ে ডিভাইসের ব্যাটারির আয়ু আরও ভালোভাবে ম্যানেজ করে:

এইসব পরিবর্তন সহ আপনার অ্যাপ পরীক্ষা করার সময়, নিম্নলিখিত বিষয়গুলি চেক করতে ভুলবেন না:

  • সিস্টেম আপনার অ্যাপকে "সীমাবদ্ধ" অ্যাপ স্ট্যান্ডবাই বাকেটে রাখলে, অ্যাপটি কীভাবে কাজ করে তা পরীক্ষা করুন। আপনার অ্যাপকে এই বাকেটে অ্যাসাইন করতে নিম্নলিখিত Android ডিবাগ ব্রিজ (ADB) কমান্ড ব্যবহার করুন:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • ব্যাকগ্রাউন্ডে ব্যাটারি ব্যবহারের জন্য "সীমাবদ্ধ" অবস্থায় থাকা অ্যাপের ক্ষেত্রে সাধারণত প্রযোজ্য নিম্নলিখিত বিধিনিষেধের প্রতি আপনার অ্যাপ কীভাবে প্রতিক্রিয়া জানায় তা পরীক্ষা করুন:

    • ফোরগ্রাউন্ড পরিষেবা চালু করা যাচ্ছে না
    • আগে থেকে থাকা ফোরগ্রাউন্ড পরিষেবাগুলি ফোরগ্রাউন্ড থেকে সরানো হয়েছে
    • অ্যালার্ম ট্রিগার করা হয়নি
    • জব এক্সিকিউট করা হয়নি

    আপনার অ্যাপকে এই "বিধিনিষেধযুক্ত" অবস্থায় রাখতে নিম্নলিখিত ADB কমান্ড ব্যবহার করুন:

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

হাই প্রায়োরিটি Firebase Cloud Message (FCM) কোটা

Android 13 (API লেভেল 33) Firebase Cloud Messaging (FCM) কোটা আপডেট করে যাতে উচ্চ অগ্রাধিকারযুক্ত FCM-এর উত্তরে বিজ্ঞপ্তি দেখানো অ্যাপের জন্য উচ্চ অগ্রাধিকারযুক্ত FCM ডেলিভারির নির্ভরযোগ্যতা উন্নত করা যায়। Android 13 (API লেভেল ৩৩)-এ নিম্নলিখিত পরিবর্তন করা হয়েছে:

  • অ্যাপ স্ট্যান্ডবাই বাকেট আর নির্ধারণ করে না যে কোনও অ্যাপ কতগুলি উচ্চ অগ্রাধিকারের FCM ব্যবহার করতে পারে।
  • সিস্টেম এখন উচ্চ অগ্রাধিকারের মেসেজ ডাউনগ্রেড করে যদি এটি কোনও অ্যাপ শনাক্ত করে ক্রমাগত উচ্চ-অগ্রাধিকার মেসেজ পাঠাচ্ছে যার ফলে কোনও বিজ্ঞপ্তি হয় না।

Android-এর আগের ভার্সনের মতো, কোটা পেরিয়ে যাওয়া বেশি অগ্রাধিকারের FCM-কে সাধারণ অগ্রাধিকারে ডাউনগ্রেড করা হয়। FCM-এর উত্তরে ফোরগ্রাউন্ড সার্ভিস (FGS) শুরু করার সময়, আমরা RemoteMessage.getPriority()-এর ফলাফল চেক করে সেটি PRIORITY_HIGH কিনা তা কনফার্ম করতে এবং/অথবা যেকোনও সম্ভাব্য ForegroundServiceStartNotAllowedException ব্যতিক্রম ম্যানেজ করতে সাজেস্ট করি।

আপনার অ্যাপ্লিকেশন যদি হাই প্রায়োরিটি FCM-এর উত্তরে সবসময় বিজ্ঞপ্তি পোস্ট না করে, তাহলে আমরা সাজেস্ট করি যে আপনি এইসব FCM-এর প্রায়োরিটি পরিবর্তন করে স্বাভাবিক করে দিন যাতে বিজ্ঞপ্তির ফলে পাওয়া মেসেজ ডাউনগ্রেড না হয়।

গোপনীয়তা

বিজ্ঞপ্তির জন্য রানটাইম অনুমতি

Android 13 (API লেভেল ৩৩) রানটাইম বিজ্ঞপ্তির অনুমতি নিয়ে এসেছে: POST_NOTIFICATIONS। এই পরিবর্তন ব্যবহারকারীদের সেইসব বিজ্ঞপ্তিতে ফোকাস করতে সাহায্য করে যেগুলি তাদের জন্য সবচেয়ে গুরুত্বপূর্ণ।

এই ফিচারের অতিরিক্ত কন্ট্রোল ও নমনীয়তার সুবিধা পেতে, আমরা আপনাকে যত তাড়াতাড়ি সম্ভব Android ১৩ বা তার পরবর্তী ভার্সন টার্গেট করার জন্য সাজেস্ট করি।

অ্যাপকে দেওয়া অনুমতি সংক্রান্ত পেশাদার পদ্ধতি সম্পর্কে আরও জানুন।

ক্লিপবোর্ড থেকে সংবেদনশীল কন্টেন্ট লুকান

আপনার অ্যাপ যদি ব্যবহারকারীদের পাসওয়ার্ড বা ক্রেডিট কার্ডের তথ্যের মতো সংবেদনশীল কন্টেন্ট ক্লিপবোর্ডে কপি করার অনুমতি দেয়, তাহলে আপনাকে ClipboardManager#setPrimaryClip() কল করার আগে ClipData-এর ClipDescription-এ একটি ফ্ল্যাগ যোগ করতে হবে। এই ফ্ল্যাগ যোগ করলে কন্টেন্ট প্রিভিউতে সংবেদনশীল কন্টেন্ট দেখানো বন্ধ হয়ে যায়।

সংবেদনশীল কন্টেন্ট ফ্ল্যাগ না করে কপি করা টেক্সটের প্রিভিউ
সংবেদনশীল কন্টেন্ট ফ্ল্যাগ না করে কপি করা টেক্সটের প্রিভিউ।
কপি করা টেক্সট প্রিভিউ সংবেদনশীল কন্টেন্ট ফ্ল্যাগ করছে।
কপি করা টেক্সটের প্রিভিউ সংবেদনশীল কন্টেন্ট ফ্ল্যাগ করছে।

সংবেদনশীল কন্টেন্ট ফ্ল্যাগ করতে, ClipDescription-এ একটি বুলিয়ান এক্সট্রা যোগ করুন। টার্গেট করা API লেভেল যাই হোক না কেন, সব অ্যাপকে এটি করতে হবে।


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

নতুন ক্লিপবোর্ড UI সম্পর্কে আরও জানতে, কপি ও পেস্ট ফিচার পৃষ্ঠা দেখুন।

নিরাপত্তা

শেয়ার করা ব্যবহারকারীর আইডি থেকে মাইগ্রেট করা

আপনার অ্যাপ যদি বন্ধ হয়ে যাওয়া android:sharedUserId অ্যাট্রিবিউট ব্যবহার করে এবং অ্যাট্রিবিউটের কার্যকারিতার উপর আর নির্ভর না করে, তাহলে আপনি android:sharedUserMaxSdkVersion অ্যাট্রিবিউট 32-এ সেট করতে পারেন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

এই অ্যাট্রিবিউট সিস্টেমকে জানায় যে আপনার অ্যাপ আর শেয়ার করা ব্যবহারকারীর আইডির উপর নির্ভর করে না। আপনার অ্যাপ যদি android:sharedUserMaxSdkVersion ঘোষণা করে এবং Android 13 বা তার পরবর্তী ভার্সন চলছে এমন ডিভাইসে নতুন করে ইনস্টল করা হয়, তাহলে আপনার অ্যাপ এমনভাবে কাজ করে যেন আপনি কখনই android:sharedUserId সংজ্ঞায়িত করেননি। আপডেট করা অ্যাপ এখনও আগে থেকে থাকা শেয়ার করা ব্যবহারকারীর আইডি ব্যবহার করে।

শেয়ার করা ব্যবহারকারীর আইডি, প্যাকেজ ম্যানেজারের মধ্যে অনির্ধারক আচরণ করে। শেয়ার করা কম্পোনেন্টের মধ্যে ইন্টারঅপারেবিলিটি সহজ করতে, আপনার অ্যাপের উচিত পরিষেবা ও কন্টেন্ট প্রোভাইডারের মতো সঠিক কমিউনিকেশন মেকানিজম ব্যবহার করা।

ব্যবহারকারীর অভিজ্ঞতা

বাতিল করা যায় এমন ফোরগ্রাউন্ড সার্ভিস সংক্রান্ত বিজ্ঞপ্তি

Android ১৩ বা তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইসে, ডিফল্ট হিসেবে ব্যবহারকারীরা ফোরগ্রাউন্ড পরিষেবার সাথে সম্পর্কিত বিজ্ঞপ্তি বাতিল করতে পারবেন।

মূল কার্যকারিতা

স্পিচ সার্ভিস ইমপ্লিমেন্টেশনের পুরনো কপি সরিয়ে দেওয়া হয়েছে

Android 13, Google অ্যাপ থেকে SpeechService প্রয়োগ করার সুবিধা সরিয়ে দেয়—এর মধ্যে ভয়েস IME, RecognitionService এবং ইনটেন্ট-ভিত্তিক API অন্তর্ভুক্ত।

Android 12-এ, নিম্নলিখিত পরিবর্তনগুলি করা হয়েছে:

  • SpeechService-এর কার্যকারিতা Speech Services by Google অ্যাপে মাইগ্রেট করা হয়েছে, যা ডিফল্ট SpeechService প্রদানকারী হয়ে উঠেছে।
  • অন-ডিভাইস স্পিচ শনাক্তকরণে সহায়তা করার জন্য RecognitionService কার্যকারিতা Android System Intelligence অ্যাপে সরানো হয়েছে।

Android ১২-এ অ্যাপের মানানসইতা বজায় রাখতে, Google অ্যাপ ট্রাম্পোলিন ব্যবহার করে ট্রাফিককে Speech Services by Google অ্যাপে ডাইভার্ট করে। Android ১৩-এ এই ট্রাম্পোলিন সরিয়ে দেওয়া হয়েছে।

অ্যাপের উচিত SpeechService-এর জন্য ডিভাইসের ডিফল্ট প্রোভাইডার ব্যবহার করা, কোনও নির্দিষ্ট অ্যাপের জন্য হার্ড-কোডিং করা নয়।