बातचीत के लिए सूचना के बबल इस्तेमाल करना

सूचना के बबल की मदद से, उपयोगकर्ताओं को बातचीत देखने और उसमें हिस्सा लेने में आसानी होती है.

पहली इमेज. चैट बबल.

ये ऐप्लिकेशन के अन्य कॉन्टेंट के ऊपर फ़्लोट करते हैं. उपयोगकर्ता, ऐप्लिकेशन के कॉन्टेंट को देखने और उससे इंटरैक्ट करने के लिए, बबल को बड़ा कर सकते हैं. साथ ही, इस्तेमाल न होने पर उन्हें छोटा कर सकते हैं.

डिवाइस लॉक होने या हमेशा चालू रहने वाले डिसप्ले के चालू होने पर, बबल सामान्य सूचनाओं की तरह दिखते हैं.

उपयोगकर्ता ने सूचना के बबल पाने की सुविधा चालू की हो. इसके लिए, उन्हें बबल की सुविधा वाली सूचनाओं पर मौजूद बबल बटन पर टैप करना होगा. इससे, उस चैट के लिए बबल हमेशा दिखता है. सेटिंग में जाकर, उपयोगकर्ता यह तय कर सकते हैं कि उन्हें किन चैट को बबल करना है. इसके अलावा, वे पूरे ऐप्लिकेशन की सेटिंग में भी बदलाव कर सकते हैं.

उपयोगकर्ता ये काम कर सकते हैं:

  • अपने ऐप्लिकेशन से सूचना के सभी बबल ब्लॉक करें. सूचनाएं ब्लॉक नहीं की जाती हैं, लेकिन वे कभी भी बबल के तौर पर नहीं दिखती हैं.
  • अपने ऐप्लिकेशन से चुनी गई सूचनाओं के बबल को अनुमति दें. बबल बटन का इस्तेमाल करके, बबल के तौर पर दिखाई गई सूचनाएं "चुनी गई" होती हैं.
  • अपने ऐप्लिकेशन से सूचना के सभी बबल को अनुमति दें. BubbleMetadata के साथ भेजी गई सभी सूचनाएं, बबल के तौर पर दिखती हैं.

Notification Bubble API

सूचना के बबल, सूचना एपीआई का इस्तेमाल करके बनाए जाते हैं. अगर आपको अपनी सूचना को बबल के तौर पर दिखाना है, तो उसमें अतिरिक्त डेटा अटैच करें.

बबल का बड़ा व्यू, आपकी चुनी गई गतिविधि से बनता है. गतिविधि को इस तरह कॉन्फ़िगर करें कि वह बबल के तौर पर सही तरीके से दिखे. गतिविधि का साइज़ बदला जा सके और उसे एम्बेड किया जा सके. अगर इनमें से कोई भी शर्त पूरी नहीं होती है, तो सिस्टम इसे सूचना के तौर पर दिखाता है.

नीचे दिए गए कोड में, बबल को लागू करने का तरीका बताया गया है:

<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" पर सेट कर देता है.

सूचना का बबल भेजने के लिए, यह तरीका अपनाएं:

  1. सामान्य तरीके से कोई सूचना बनाएं.
  2. BubbleMetadata ऑब्जेक्ट बनाने के लिए, BubbleMetadata.Builder(PendingIntent, Icon) या BubbleMetadata.Builder(String) को कॉल करें.
  3. सूचना में मेटाडेटा जोड़ने के लिए, setBubbleMetadata() का इस्तेमाल करें.
  4. अगर Android 11 (एपीआई लेवल 30) या इसके बाद के वर्शन को टारगेट किया जा रहा है, तो पक्का करें कि बबल का मेटाडेटा या सूचना, शेयर करने के शॉर्टकट का रेफ़रंस देती हो.
  5. अपने ऐप्लिकेशन में बदलाव करें, ताकि बबल्स के तौर पर दिखने वाली सूचनाएं रद्द न हों. किसी सूचना को खारिज करने पर, स्क्रीन से बबल हट जाता है. बबल खोलने पर, उससे जुड़ी सूचना अपने-आप छिप जाती है.

इन चरणों को यहां दिए गए उदाहरण में दिखाया गया है:

// 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 (एपीआई लेवल 30) या इसके बाद के वर्शन को टारगेट करता है, तो सूचना तब तक बबल के तौर पर नहीं दिखती, जब तक वह बातचीत से जुड़ी ज़रूरी शर्तें पूरी न करती हो. अगर कोई ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या इससे पहले के वर्शन को टारगेट करता है, तो सूचना बबल के तौर पर सिर्फ़ तब दिखती है, जब इनमें से एक या उससे ज़्यादा शर्तें पूरी हों:

  • सूचना में MessagingStyle का इस्तेमाल किया गया है और इसमें Person जोड़ा गया है.
  • यह सूचना Service.startForeground को किए गए कॉल से जुड़ी है. इसमें CATEGORY_CALL का category है और Person जोड़ा गया है.
  • सूचना भेजे जाने के समय, ऐप्लिकेशन फ़ोरग्राउंड में हो.

अगर इनमें से कोई भी शर्त पूरी नहीं होती है, तो बबल के बजाय सूचना दिखती है.

बबल से गतिविधियां लॉन्च करना

जब कोई बबल नई गतिविधि लॉन्च करता है, तो नई गतिविधि उसी टास्क और बबल वाली विंडो में लॉन्च होगी या फ़ुलस्क्रीन में नए टास्क में लॉन्च होगी. इससे, उसे लॉन्च करने वाला बबल छोटा हो जाएगा.

बबल वाले टास्क में ही कोई नई गतिविधि लॉन्च करने के लिए: 1. इंटेंट लॉन्च करते समय, गतिविधि के कॉन्टेक्स्ट का इस्तेमाल करें, activity.startActivity(intent), और 1. इंटेंट पर FLAG_ACTIVITY_NEW_TASK फ़्लैग सेट न करें.

ऐसा न होने पर, नई गतिविधि को नए टास्क में शुरू किया जाता है और बबल को छोटा कर दिया जाता है.

ध्यान रखें कि बबल किसी खास बातचीत को दिखाता है. इसलिए, बबल में लॉन्च की गई गतिविधियां उस बातचीत से जुड़ी होनी चाहिए. इसके अलावा, बबल में कोई गतिविधि लॉन्च करने से, बबल का टास्क स्टैक बढ़ जाता है. इससे, उपयोगकर्ता अनुभव को बेहतर बनाने में परेशानी हो सकती है. खास तौर पर, नेविगेशन के मामले में.

सबसे सही तरीके

  • सूचना को बबल के तौर पर सिर्फ़ तब भेजें, जब वह ज़रूरी हो. जैसे, जब वह बातचीत का हिस्सा हो या उपयोगकर्ता ने कॉन्टेंट के लिए बबल का अनुरोध किया हो. बबल, स्क्रीन पर जगह लेते हैं और अन्य ऐप्लिकेशन के कॉन्टेंट को कवर करते हैं.
  • पक्का करें कि बबल नोटिफ़िकेशन, सामान्य नोटिफ़िकेशन की तरह भी काम करे. जब उपयोगकर्ता बबल की सुविधा बंद कर देता है, तो बबल की सूचना सामान्य सूचना के तौर पर दिखती है.
  • BackHandler कंपोज़ेबल का इस्तेमाल करें और इसके enabled पैरामीटर को अपने यूज़र इंटरफ़ेस (यूआई) की स्थिति से जोड़ें, ताकि यह सिर्फ़ ज़रूरत पड़ने पर ही बैक बटन को इंटरसेप्ट करे. हैंडलर के बंद होने पर, बबल छोटा हो जाता है.

जब छोटे किए गए बबल को कोई अपडेट किया गया मैसेज मिलता है, तो बबल पर बैज आइकॉन दिखता है. इससे पता चलता है कि मैसेज पढ़ा नहीं गया है. जब उपयोगकर्ता, लिंक किए गए ऐप्लिकेशन में मैसेज खोलता है, तो यह तरीका अपनाएं:

  • सूचना को दबाने के लिए, BubbleMetadata को अपडेट करें. BubbleMetadata.Builder.setSuppressNotification() पर कॉल करें. इससे बैज आइकॉन हट जाता है. इससे पता चलता है कि उपयोगकर्ता ने मैसेज के साथ इंटरैक्ट किया है.
  • BubbleMetadata अपडेट के साथ आने वाली आवाज़ या वाइब्रेशन को बंद करने के लिए, Notification.Builder.setOnlyAlertOnce() को true पर सेट करें.

सैंपल के तौर पर मिला ऐप्लिकेशन

SociaLite सैंपल ऐप्लिकेशन, बातचीत करने वाला एक ऐप्लिकेशन है. यह बबल्स का इस्तेमाल करता है. यह ऐप्लिकेशन, चैटबॉट का इस्तेमाल करके डेमो दिखाता है. असल दुनिया के ऐप्लिकेशन में, इंसानों के मैसेज के लिए बबल्स का इस्तेमाल करें.