বিজ্ঞপ্তির বাবল ব্যবহারকারীদের কথোপকথন দেখতে এবং তাতে অংশগ্রহণ করতে সহজ করে তোলে।
এগুলি অন্যান্য অ্যাপ কন্টেন্টের উপরে ভেসে থাকে এবং ব্যবহারকারীরা অ্যাপ কন্টেন্ট দেখতে ও তার সাথে ইন্টার্যাক্ট করতে বাবল বড় করতে পারেন এবং ব্যবহার না করার সময় সেগুলি ছোট করে দিতে পারেন।
ডিভাইস লক করা থাকলে বা সবসময় চালু ডিসপ্লে অ্যাক্টিভ থাকলে, সাধারণত যেভাবে বিজ্ঞপ্তি দেখানো হয়, সেভাবেই বাবল দেখানো হয়।
ব্যবহারকারী বিজ্ঞপ্তির বাবল চালু করেছেন। যেসব বিজ্ঞপ্তিতে বাবল কাজ করে, সেগুলিতে বাবল বোতামে ট্যাপ করে তারা এটি করতে পারবেন। এর ফলে সেই নির্দিষ্ট চ্যাট সবসময় বাবল হিসেবে দেখা যাবে। সেটিংসে, ব্যবহারকারীরা কোন চ্যাট বাবল করেছেন তা অ্যাডজাস্ট করতে পারেন অথবা সামগ্রিক অ্যাপের জন্য সেটিংস পরিবর্তন করতে পারেন।
ব্যবহারকারীরা নিম্নলিখিত কাজগুলি করতে পারবেন:
- আপনার অ্যাপ থেকে সব বিজ্ঞপ্তির বাবল ব্লক করুন। বিজ্ঞপ্তি ব্লক করা হয় না, তবে সেগুলি কখনও বাবল হিসেবে দেখানো হয় না।
- আপনার অ্যাপ থেকে বেছে নেওয়া বিজ্ঞপ্তির বাবলকে অনুমতি দিন। বাবল বোতাম ব্যবহার করে বাবল করা বিজ্ঞপ্তি "বেছে নেওয়া" হয়েছে।
- আপনার অ্যাপ থেকে সব বিজ্ঞপ্তির বাবলকে অনুমতি দিন।
BubbleMetadata-এর মাধ্যমে পাঠানো সব বিজ্ঞপ্তি বাবল হিসেবে দেখা যায়।
Notification Bubble API
বিজ্ঞপ্তির বাবল, বিজ্ঞপ্তি API ব্যবহার করে তৈরি করা হয়। আপনি যদি চান যে আপনার বিজ্ঞপ্তিটি একটি বাবল হিসাবে প্রদর্শিত হোক, তাহলে এতে অতিরিক্ত ডেটা অ্যাটাচ করুন।
আপনার বেছে নেওয়া অ্যাক্টিভিটি থেকে বাবলের বড় করা ভিউ তৈরি করা হয়। অ্যাক্টিভিটি যাতে বাবল হিসেবে সঠিকভাবে দেখা যায় তার জন্য কনফিগার করুন। অ্যাক্টিভিটি অবশ্যই ছোট-বড় করা যায় এমন এবং এম্বেড করা হতে হবে। এগুলির মধ্যে কোনও একটি প্রয়োজনীয়তা না থাকলে, সিস্টেম এটিকে বিজ্ঞপ্তি হিসেবে দেখায়।
নিম্নলিখিত কোডটি দেখায় যে কীভাবে একটি বাবল প্রয়োগ করতে হয়:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
আপনার অ্যাপ যদি একই ধরনের একাধিক বাবল দেখায়, যেমন বিভিন্ন পরিচিতির সাথে একাধিক চ্যাট
কথোপকথন, তাহলে অ্যাক্টিভিটি অবশ্যই একাধিক ইনস্ট্যান্স
লঞ্চ করতে পারবে। Android ১০ ও তার আগের যেকোনও ভার্সন ইনস্টল করা আছে এমন ডিভাইসে,
আপনি স্পষ্টভাবে documentLaunchMode-কে
"always"-এ সেট না করলে,
বিজ্ঞপ্তি বাবল হিসেবে দেখানো হয় না। Android 11 থেকে শুরু করে, আপনাকে স্পষ্টভাবে এই ভ্যালু সেট করতে হবে না, কারণ সিস্টেম অটোমেটিক সব কথোপকথনের documentLaunchMode-কে "always"-এ সেট করে।
বিজ্ঞপ্তির বাবল পাঠাতে, এই ধাপগুলি অনুসরণ করুন:
- আপনি সাধারণত যেভাবে করেন সেইভাবে বিজ্ঞপ্তি তৈরি করুন।
BubbleMetadataঅবজেক্ট তৈরি করতেBubbleMetadata.Builder(PendingIntent, Icon)অথবাBubbleMetadata.Builder(String)কল করুন।- বিজ্ঞপ্তিতে মেটাডেটা যোগ করতে
setBubbleMetadata()ব্যবহার করুন। - Android 11 (API লেভেল ৩০) বা তার পরবর্তী ভার্সন টার্গেট করলে, বাবল মেটাডেটা বা বিজ্ঞপ্তি কোনও শেয়ারিং শর্টকাটকে রেফার করছে কিনা তা নিশ্চিত করুন।
- আপনার অ্যাপ এমনভাবে পরিবর্তন করুন যাতে বাবল হিসেবে দেখানো বিজ্ঞপ্তি বাতিল না করা হয়। বিজ্ঞপ্তি বাতিল করলে স্ক্রিন থেকে বাবল সরিয়ে দেওয়া হয়। কোনও বাবল খুললে তার সাথে যুক্ত বিজ্ঞপ্তি অটোমেটিক লুকিয়ে যায়।
এইসব ধাপ নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
// Create a bubble intent. val target = Intent(context, BubbleActivity::class.java) val bubbleIntent = PendingIntent.getActivity(context, 0, target, PendingIntent.FLAG_IMMUTABLE /* flags */) val category = "com.example.category.IMG_SHARE_TARGET" val chatPartner = Person.Builder() .setName("Chat partner") .setImportant(true) .build() // Create a sharing shortcut. val shortcutId = generateShortcutId() val shortcut = ShortcutInfoCompat.Builder(context, shortcutId) .setCategories(setOf(category)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel("Chat partner name") .build() // Publish the shortcut, otherwise the bubble metadata will not apply. ShortcutManagerCompat.pushDynamicShortcut(context, shortcut) // Create a bubble metadata. val bubbleData = NotificationCompat.BubbleMetadata.Builder(bubbleIntent, IconCompat.createWithResource(context, R.drawable.ic_logo)) .setDesiredHeight(600) .build() // Create a notification, referencing the sharing shortcut. val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.chat) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner)
কোনও বাবল পাঠানোর সময় আপনার অ্যাপ ফোরগ্রাউন্ডে থাকলে, গুরুত্ব উপেক্ষা করা হয় এবং আপনার বাবল সবসময় দেখানো হয়, যদি না ব্যবহারকারী আপনার অ্যাপ থেকে বাবল বা বিজ্ঞপ্তি ব্লক করেন।
একটি বড় করা বাবল তৈরি করুন
আপনি বাবল কনফিগার করতে পারেন যাতে এটি অটোমেটিক বড় করে দেখানো হয়। আমরা সাজেস্ট করি যে ব্যবহারকারী এমন কোনও অ্যাকশন পারফর্ম করলে তবেই এই ফিচার ব্যবহার করুন যার ফলে বাবল তৈরি হয়, যেমন নতুন চ্যাট শুরু করার জন্য কোনও বোতামে ট্যাপ করা। এই ক্ষেত্রে, বাবল তৈরি হওয়ার সময় পাঠানো প্রাথমিক বিজ্ঞপ্তি বন্ধ করে দেওয়াও যুক্তিযুক্ত।
এইসব আচরণ চালু করে এমন ফ্ল্যাগ সেট করার জন্য আপনি এইসব পদ্ধতি ব্যবহার করতে পারবেন:
setAutoExpandBubble()
এবং
setSuppressNotification().
নিচের উদাহরণে দেখানো হয়েছে যে কীভাবে একটি বাবলকে বড় করে দেখানোর জন্য কনফিগার করতে হয়:
val bubbleMetadata = NotificationCompat.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build()
বাবল কন্টেন্ট লাইফসাইকেল
কোনও বাবল বড় করা হলে, কন্টেন্ট অ্যাক্টিভিটি স্বাভাবিক প্রসেস লাইফসাইকেল-এর মাধ্যমে চলে, যার ফলে অ্যাপ্লিকেশনটি ফোরগ্রাউন্ড প্রসেস হয়ে যায়, যদি এটি আগে থেকে না হয়ে থাকে।
বাবলটি বন্ধ বা বাতিল করা হলে, অ্যাক্টিভিটিটি ধ্বংস হয়ে যায়। এর ফলে প্রসেসটি ক্যাশে করা হতে পারে এবং পরে বন্ধ করে দেওয়া হতে পারে, তবে এটি নির্ভর করে অ্যাপের অন্যান্য ফোরগ্রাউন্ড কম্পোনেন্ট চলছে কিনা তার উপর।
বাবল কখন দেখা যায়
ব্যবহারকারীর জন্য বাধা কমানোর জন্য, বাবল শুধুমাত্র নির্দিষ্ট কিছু পরিস্থিতিতে দেখা যায়।
কোনও অ্যাপ Android 11 (API লেভেল ৩০) বা তার পরবর্তী ভার্সনকে টার্গেট করলে, কথোপকথন সংক্রান্ত প্রয়োজনীয়তা পূরণ না করা পর্যন্ত বিজ্ঞপ্তি বাবল হিসেবে দেখা যায় না। কোনও অ্যাপ যদি Android 10 (API লেভেল ২৯) বা তার আগের ভার্সনকে টার্গেট করে, তাহলে বিজ্ঞপ্তিটি বাবল হিসেবে তখনই দেখা যাবে যদি নিম্নলিখিত এক বা একাধিক শর্ত পূরণ করা হয়:
- বিজ্ঞপ্তিটি
MessagingStyleব্যবহার করে এবং এতে একটিPersonযোগ করা হয়েছে। - বিজ্ঞপ্তিটি
Service.startForeground-এ করা কল থেকে এসেছে, যারcategoryহলCATEGORY_CALLএবং এতেPersonযোগ করা আছে। - বিজ্ঞপ্তি পাঠানোর সময় অ্যাপটি ফোরগ্রাউন্ডে থাকে।
এইসব শর্তের কোনওটিই পূরণ না হলে, বাবলের পরিবর্তে বিজ্ঞপ্তি দেখানো হয়।
বাবল থেকে অ্যাক্টিভিটি লঞ্চ করা
কোনও বাবল নতুন অ্যাক্টিভিটি লঞ্চ করলে, নতুন অ্যাক্টিভিটি একই টাস্ক ও একই বাবল উইন্ডোর মধ্যে অথবা ফুলস্ক্রিনে নতুন টাস্ক হিসেবে লঞ্চ হবে, যে বাবল এটি লঞ্চ করেছে সেটি বন্ধ হয়ে যাবে।
বাবলের মতো একই টাস্কে নতুন অ্যাক্টিভিটি লঞ্চ করতে:
১. ইনটেন্ট লঞ্চ করার সময় অ্যাক্টিভিটি প্রসঙ্গ ব্যবহার করুন,
activity.startActivity(intent), এবং
১. ইন্টেন্টে FLAG_ACTIVITY_NEW_TASK ফ্ল্যাগ সেট করবেন না।
অন্যথায়, নতুন অ্যাক্টিভিটি নতুন টাস্কে শুরু হয় এবং বাবলটি আগের অবস্থায় ফিরে যায়।
মনে রাখবেন যে একটি বাবল একটি নির্দিষ্ট কথোপকথনকে উপস্থাপন করে, তাই বাবলের মধ্যে শুরু করা অ্যাক্টিভিটিগুলি সেই কথোপকথনের সাথে সম্পর্কিত হওয়া উচিত। এছাড়াও, বাবলের মধ্যে অ্যাক্টিভিটি লঞ্চ করলে বাবলের টাস্ক স্ট্যাক বেড়ে যায় এবং এর ফলে ব্যবহারকারীর অভিজ্ঞতা জটিল হয়ে যেতে পারে, বিশেষ করে নেভিগেশনের ক্ষেত্রে।
পেশাদার পদ্ধতি
- শুধুমাত্র গুরুত্বপূর্ণ হলে তবেই বাবল হিসেবে বিজ্ঞপ্তি পাঠান, যেমন এটি যদি চলমান যোগাযোগের অংশ হয় বা ব্যবহারকারী যদি কন্টেন্টের জন্য স্পষ্টভাবে একটি বাবল অনুরোধ করেন। বাবল স্ক্রিনের জায়গা ব্যবহার করে এবং অন্যান্য অ্যাপের কন্টেন্ট ঢেকে দেয়।
- আপনার বাবল বিজ্ঞপ্তিও যাতে সাধারণ বিজ্ঞপ্তির মতো কাজ করে তা নিশ্চিত করুন। ব্যবহারকারী বাবল বন্ধ করে দিলে, বাবল বিজ্ঞপ্তি সাধারণ বিজ্ঞপ্তি হিসেবে দেখানো হয়।
BackHandlerকম্পোজেবল ব্যবহার করুন এবং এরenabledপ্যারামিটার আপনার UI স্টেট-এর সাথে টাই করুন যাতে এটি শুধুমাত্র প্রয়োজন হলে ব্যাক প্রেস ইন্টারসেপ্ট করে। হ্যান্ডলার নিজেকে বন্ধ করে দিলে, বাবলটি বন্ধ হয়ে যায়।
কোনও আড়াল করা বাবল আপডেট করা মেসেজ পেলে, বাবলটি অপঠিত মেসেজ দেখানোর জন্য একটি ব্যাজ আইকন দেখায়। ব্যবহারকারী সংশ্লিষ্ট অ্যাপে মেসেজ খুললে, এইসব ধাপ অনুসরণ করুন:
- বিজ্ঞপ্তি বন্ধ করতে
BubbleMetadataআপডেট করুন।BubbleMetadata.Builder.setSuppressNotification()-এ কল করুন। এটি ব্যাজ আইকন সরিয়ে দেয়, যা থেকে বোঝা যায় যে ব্যবহারকারী মেসেজের সাথে ইন্টার্যাক্ট করেছেন। BubbleMetadataআপডেট হওয়ার সময় সাউন্ড বা ভাইব্রেশন বন্ধ করতেNotification.Builder.setOnlyAlertOnce()true-এ সেট করুন।
স্যাম্পেল অ্যাপ
SociaLite স্যাম্পেল অ্যাপ হল একটি কথোপকথন অ্যাপ যা বাবল ব্যবহার করে। ডেমো দেখানোর জন্য এই অ্যাপ চ্যাটবট ব্যবহার করে। বাস্তব-জগতের অ্যাপ্লিকেশনে, মানুষের পাঠানো মেসেজের জন্য বাবল ব্যবহার করুন।