বাবল ব্যবহারকারীদের কথোপকথন দেখা এবং অংশগ্রহণ করা সহজ করে তোলে।
বাবলগুলি নোটিফিকেশন সিস্টেমের মধ্যেই তৈরি। এগুলি অন্যান্য অ্যাপ কন্টেন্টের উপরে ভেসে থাকে এবং ব্যবহারকারী যেখানেই যান না কেন তাকে অনুসরণ করে। ব্যবহারকারীরা অ্যাপ কন্টেন্ট প্রকাশ এবং ইন্টারঅ্যাক্ট করার জন্য বাবলগুলি প্রসারিত করতে পারেন এবং যখন তারা ব্যবহার করছেন না তখন তারা সেগুলি ভেঙে ফেলতে পারেন।
যখন ডিভাইসটি লক থাকে, অথবা সর্বদা-অন-ডিসপ্লে সক্রিয় থাকে, তখন সাধারণত বিজ্ঞপ্তিগুলির মতো বুদবুদগুলি প্রদর্শিত হয়।
বাবল হল একটি অপ্ট-আউট বৈশিষ্ট্য। যখন কোনও অ্যাপ তার প্রথম বাবল উপস্থাপন করে, তখন একটি অনুমতি ডায়ালগ দুটি বিকল্প অফার করে:
- আপনার অ্যাপ থেকে সমস্ত বাবল ব্লক করুন। বিজ্ঞপ্তি ব্লক করা হয় না, তবে সেগুলি কখনই বাবল হিসাবে দেখা যায় না।
- আপনার অ্যাপ থেকে সমস্ত বাবল ব্যবহারের অনুমতি দিন।
BubbleMetaDataদিয়ে পাঠানো সমস্ত বিজ্ঞপ্তি বাবল হিসেবে দেখাবে।
বাবল এপিআই
নোটিফিকেশন এপিআই ব্যবহার করে বুদবুদ তৈরি করা হয়, তাই আপনার নোটিফিকেশনটি স্বাভাবিকভাবে পাঠান। যদি আপনি চান যে আপনার নোটিফিকেশনটি বুদবুদ হিসেবে প্রদর্শিত হোক, তাহলে এতে অতিরিক্ত ডেটা সংযুক্ত করুন।
আপনার পছন্দের একটি কার্যকলাপ থেকে একটি বুদবুদের প্রসারিত দৃশ্য তৈরি করা হয়। কার্যকলাপটিকে সঠিকভাবে একটি বুদবুদ হিসাবে প্রদর্শনের জন্য কনফিগার করুন। কার্যকলাপটি অবশ্যই আকার পরিবর্তনযোগ্য এবং এমবেড করা উচিত। যদি এতে এই প্রয়োজনীয়তাগুলির কোনওটি না থাকে, তবে এটি পরিবর্তে একটি বিজ্ঞপ্তি হিসাবে প্রদর্শিত হবে।
নিচের কোডটি দেখায় কিভাবে একটি বাবল বাস্তবায়ন করতে হয়:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
যদি আপনার অ্যাপে একই ধরণের একাধিক বাবল দেখায়, যেমন বিভিন্ন পরিচিতির সাথে একাধিক চ্যাট কথোপকথন, তাহলে অ্যাক্টিভিটিটি অবশ্যই একাধিক ইনস্ট্যান্স চালু করতে সক্ষম হবে। Android 10 এবং তার নিচের ভার্সনগুলিতে, আপনি যদি স্পষ্টভাবে documentLaunchMode "always" এ সেট না করেন তবে বিজ্ঞপ্তিগুলি বাবল হিসাবে দেখানো হবে না। Android 11 থেকে শুরু করে, আপনাকে স্পষ্টভাবে এই মানটি সেট করার প্রয়োজন নেই, কারণ সিস্টেম স্বয়ংক্রিয়ভাবে সমস্ত কথোপকথনের documentLaunchMode কে "always" এ সেট করে।
একটি বাবল পাঠাতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনি স্বাভাবিকভাবে একটি বিজ্ঞপ্তি তৈরি করুন ।
- একটি
BubbleMetadataঅবজেক্ট তৈরি করতেBubbleMetadata.Builder(PendingIntent, Icon)অথবাBubbleMetadata.Builder(String)এ কল করুন। - বিজ্ঞপ্তিতে মেটাডেটা যোগ করতে
setBubbleMetadata()ব্যবহার করুন। - যদি আপনি Android 11 বা তার পরবর্তী ভার্সন ব্যবহার করেন, তাহলে নিশ্চিত করুন যে বাবল মেটাডেটা বা বিজ্ঞপ্তিতে একটি শেয়ারিং শর্টকাট উল্লেখ করা আছে।
- বাবল হিসেবে প্রদর্শিত বিজ্ঞপ্তিগুলি বাতিল না করার জন্য আপনার অ্যাপটি পরিবর্তন করুন। বিজ্ঞপ্তি কার্যকলাপটি বাবল হিসেবে চালু হয়েছে কিনা তা পরীক্ষা করতে,
Activity#isLaunchedFromBubble()কল করুন। একটি বিজ্ঞপ্তি বাতিল করলে স্ক্রিন থেকে বাবলটি সরে যায়। একটি বাবল খোলার ফলে এর সাথে সম্পর্কিত বিজ্ঞপ্তিটি স্বয়ংক্রিয়ভাবে লুকিয়ে যায়।
এই ধাপগুলি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
// Create a bubble intent. val target = Intent(context, BubbleActivity::class.java) val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 /* 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 = ShortcutInfo.Builder(mContext, shortcutId) .setCategories(setOf(category)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel(chatPartner.name) .build() // Create a bubble metadata. val bubbleData = Notification.BubbleMetadata.Builder(bubbleIntent, Icon.createWithResource(context, R.drawable.icon)) .setDesiredHeight(600) .build() // Create a notification, referencing the sharing shortcut. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner)
জাভা
// Create a bubble intent. Intent target = new Intent(mContext, BubbleActivity.class); PendingIntent bubbleIntent = PendingIntent.getActivity(mContext, 0, target, 0 /* flags */); private val CATEGORY_TEXT_SHARE_TARGET = "com.example.category.IMG_SHARE_TARGET" Person chatPartner = new Person.Builder() .setName("Chat partner") .setImportant(true) .build(); // Create a sharing shortcut. private String shortcutId = generateShortcutId(); ShortcutInfo shortcut = new ShortcutInfo.Builder(mContext, shortcutId) .setCategories(Collections.singleton(CATEGORY_TEXT_SHARE_TARGET)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel(chatPartner.getName()) .build(); // Create a bubble metadata. Notification.BubbleMetadata bubbleData = new Notification.BubbleMetadata.Builder(bubbleIntent, Icon.createWithResource(context, R.drawable.icon)) .setDesiredHeight(600) .build(); // Create a notification, referencing the sharing shortcut. Notification.Builder builder = new Notification.Builder(mContext, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner);
যদি আপনার অ্যাপটি বুদবুদ পাঠানোর সময় সামনে থাকে, তাহলে গুরুত্ব উপেক্ষা করা হবে এবং আপনার বুদবুদ সর্বদা দেখানো হবে, যদি না ব্যবহারকারী আপনার অ্যাপ থেকে বুদবুদ বা বিজ্ঞপ্তি ব্লক করে।
একটি প্রসারিত বুদবুদ তৈরি করুন
আপনি আপনার বাবলটিকে স্বয়ংক্রিয়ভাবে প্রসারিত অবস্থায় উপস্থাপন করার জন্য কনফিগার করতে পারেন। আমরা এই বৈশিষ্ট্যটি শুধুমাত্র তখনই ব্যবহার করার পরামর্শ দিচ্ছি যদি ব্যবহারকারী এমন কোনও কাজ করেন যার ফলে বাবল তৈরি হয়, যেমন একটি নতুন চ্যাট শুরু করার জন্য একটি বোতামে ট্যাপ করা। এই ক্ষেত্রে, বাবল তৈরি হওয়ার সময় প্রেরিত প্রাথমিক বিজ্ঞপ্তিটি বন্ধ করে দেওয়াও যুক্তিসঙ্গত।
এই আচরণগুলি সক্ষম করে এমন ফ্ল্যাগ সেট করার জন্য আপনি কিছু পদ্ধতি ব্যবহার করতে পারেন: setAutoExpandBubble() এবং setSuppressNotification() ।
নিম্নলিখিত উদাহরণে দেখানো হয়েছে কিভাবে একটি বুদবুদকে স্বয়ংক্রিয়ভাবে প্রসারিত অবস্থায় উপস্থাপন করতে কনফিগার করতে হয়:
কোটলিন
val bubbleMetadata = Notification.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build()
জাভা
Notification.BubbleMetadata bubbleData = new Notification.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build();
বাবল কন্টেন্টের জীবনচক্র
যখন একটি বুদবুদ প্রসারিত করা হয়, তখন বিষয়বস্তু কার্যকলাপ স্বাভাবিক প্রক্রিয়া জীবনচক্রের মধ্য দিয়ে যায়, যার ফলে অ্যাপ্লিকেশনটি একটি অগ্রভাগ প্রক্রিয়ায় পরিণত হয়, যদি এটি ইতিমধ্যে না থাকে।
যখন বাবলটি ভেঙে ফেলা হয় বা খারিজ করা হয়, তখন কার্যকলাপটি ধ্বংস হয়ে যায়। এর ফলে প্রক্রিয়াটি ক্যাশে করা হতে পারে এবং পরে বন্ধ হয়ে যেতে পারে, এটি নির্ভর করে অ্যাপটির অন্যান্য ফোরগ্রাউন্ড উপাদানগুলি চালু আছে কিনা তার উপর।
যখন বুদবুদ দেখা দেয়
ব্যবহারকারীর জন্য বাধা কমাতে, বুদবুদগুলি শুধুমাত্র নির্দিষ্ট পরিস্থিতিতেই প্রদর্শিত হয়।
যদি কোনও অ্যাপ অ্যান্ড্রয়েড ১১ বা তার পরবর্তী সংস্করণকে লক্ষ্য করে, তাহলে কথোপকথনের প্রয়োজনীয়তা পূরণ না করা পর্যন্ত কোনও বিজ্ঞপ্তি বাবল হিসেবে প্রদর্শিত হবে না। যদি কোনও অ্যাপ অ্যান্ড্রয়েড ১০ বা তার পরবর্তী সংস্করণকে লক্ষ্য করে, তাহলে নিম্নলিখিত এক বা একাধিক শর্ত পূরণ হলেই বিজ্ঞপ্তিটি বাবল হিসেবে প্রদর্শিত হবে:
- বিজ্ঞপ্তিটি
MessagingStyleব্যবহার করে এবং একজনPersonযোগ করা হয়েছে। - বিজ্ঞপ্তিটি
Service.startForegroundএ কল করা হয়েছে, এর একটিcategoryCATEGORY_CALLএবং একটিPersonযোগ করা হয়েছে। - বিজ্ঞপ্তি পাঠানোর সময় অ্যাপটি সামনে থাকে।
যদি এই শর্তগুলির কোনওটিই পূরণ না হয়, তাহলে একটি বুদবুদের পরিবর্তে বিজ্ঞপ্তিটি দেখানো হবে।
বুদবুদ থেকে কার্যক্রম শুরু করা
যখন একটি বাবল একটি নতুন অ্যাক্টিভিটি চালু করে, তখন নতুন অ্যাক্টিভিটি হয় একই টাস্ক এবং একই বাবল উইন্ডোর মধ্যে চালু হবে, অথবা পূর্ণস্ক্রিনে একটি নতুন টাস্কে, যে বাবলটি চালু করেছিল সেটি ভেঙে ফেলবে।
বাবলের মতো একই টাস্কে একটি নতুন অ্যাক্টিভিটি চালু করতে: ১. ইনটেন্ট, activity.startActivity(intent) এবং ১. ইনটেন্টে FLAG_ACTIVITY_NEW_TASK ফ্ল্যাগ সেট করবেন না।
অন্যথায়, নতুন কার্যকলাপটি একটি নতুন কাজে শুরু হয় এবং বুদবুদটি ভেঙে যায়।
মনে রাখবেন যে একটি বাবল একটি নির্দিষ্ট কথোপকথনের প্রতিনিধিত্ব করে, তাই বাবলের মধ্যে চালু হওয়া কার্যকলাপগুলি সেই কথোপকথনের সাথে সম্পর্কিত হওয়া উচিত। উপরন্তু, বাবলের মধ্যে একটি কার্যকলাপ শুরু করলে বাবলের টাস্ক স্ট্যাক বৃদ্ধি পায় এবং ব্যবহারকারীর অভিজ্ঞতা জটিল হতে পারে, বিশেষ করে নেভিগেশনের ক্ষেত্রে।
সেরা অনুশীলন
- যদি এটি গুরুত্বপূর্ণ হয়, যেমন যখন এটি কোনও চলমান যোগাযোগের অংশ হয় অথবা ব্যবহারকারী স্পষ্টভাবে কন্টেন্টের জন্য একটি বাবলের অনুরোধ করে, শুধুমাত্র তখনই বাবল হিসেবে বিজ্ঞপ্তি পাঠান। বাবলগুলি স্ক্রিন রিয়েল এস্টেট ব্যবহার করে এবং অন্যান্য অ্যাপের কন্টেন্ট কভার করে।
- নিশ্চিত করুন যে আপনার বাবল বিজ্ঞপ্তিটি একটি সাধারণ বিজ্ঞপ্তি হিসেবেও কাজ করে। ব্যবহারকারী যখন বাবলটি অক্ষম করেন, তখন একটি বাবল বিজ্ঞপ্তি একটি সাধারণ বিজ্ঞপ্তি হিসেবে প্রদর্শিত হয়।
- বাবল অ্যাক্টিভিটিতে
onBackPressedওভাররাইড করার সময়super.onBackPressedকল করুন। অন্যথায়, আপনার বাবল সঠিকভাবে কাজ নাও করতে পারে।
যখন একটি ধসে পড়া বাবল একটি আপডেট করা বার্তা পায়, তখন বাবলটি একটি ব্যাজ আইকন দেখায় যা একটি অপঠিত বার্তা নির্দেশ করে। ব্যবহারকারী যখন সংশ্লিষ্ট অ্যাপে বার্তাটি খোলেন, তখন এই পদক্ষেপগুলি অনুসরণ করুন:
- বিজ্ঞপ্তিটি বন্ধ করতে
BubbleMetadataআপডেট করুন ।BubbleMetadata.Builder.setSuppressNotification()কল করুন। এটি ব্যাজ আইকনটি সরিয়ে দেয় যা নির্দেশ করে যে ব্যবহারকারী বার্তাটির সাথে ইন্টারঅ্যাক্ট করেছেন। -
BubbleMetadataআপডেটের সাথে আসা শব্দ বা কম্পন দমন করতেNotification.Builder.setOnlyAlertOnce()trueএ সেট করুন।
নমুনা অ্যাপ
SociaLite নমুনা অ্যাপটি একটি কথোপকথন অ্যাপ যা বুদবুদ ব্যবহার করে। প্রদর্শনের উদ্দেশ্যে, এই অ্যাপটি চ্যাটবট ব্যবহার করে। বাস্তব-বিশ্বের অ্যাপ্লিকেশনগুলিতে, মানুষের বার্তাগুলির জন্য বুদবুদ ব্যবহার করুন।