बबल का इस्तेमाल करके, उपयोगकर्ताओं को बातचीत में हिस्सा लेने की सुविधा दें

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

पहला डायग्राम. चैट बबल.

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

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

बबल की सुविधा को ऑप्ट-आउट किया जा सकता है. जब कोई ऐप्लिकेशन अपना पहला बबल दिखाता है, तो अनुमति वाले डायलॉग में दो विकल्प दिखते हैं:

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

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 या उसके बाद के वर्शन को टारगेट किया जा रहा है, तो पक्का करें कि बबल के मेटाडेटा या सूचना में, शेयर करने के लिए उपलब्ध शॉर्टकट का रेफ़रंस दिया गया हो.
  5. अपने ऐप्लिकेशन में बदलाव करें, ताकि उसे बबल्स के तौर पर दिखने वाली सूचनाओं को रद्द नहीं किया जा सके. यह देखने के लिए कि सूचना गतिविधि, बबल के तौर पर लॉन्च की गई है या नहीं, Activity#isLaunchedFromBubble() को कॉल करें. किसी सूचना को रद्द करने पर, स्क्रीन से बबल हट जाता है. किसी बबल को खोलने पर, उससे जुड़ी सूचना अपने-आप छिप जाती है.

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

Kotlin

// 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)

Java

// 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().

इस उदाहरण में, किसी बबल को अपने-आप बड़ा करके दिखाने के लिए कॉन्फ़िगर करने का तरीका बताया गया है:

Kotlin

val bubbleMetadata = Notification.BubbleMetadata.Builder()
    .setDesiredHeight(600)
    .setIntent(bubbleIntent)
    .setAutoExpandBubble(true)
    .setSuppressNotification(true)
    .build()

Java

Notification.BubbleMetadata bubbleData =
    new Notification.BubbleMetadata.Builder()
        .setDesiredHeight(600)
        .setIntent(bubbleIntent)
        .setAutoExpandBubble(true)
        .setSuppressNotification(true)
        .build();

बबल कॉन्टेंट का लाइफ़साइकल

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

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

बबल कब दिखते हैं

लोगों को रुकावटों को कम करने के लिए, बबल्स सिर्फ़ कुछ परिस्थितियों में ही दिखाए जाते हैं.

अगर कोई ऐप्लिकेशन, Android 11 या उसके बाद के वर्शन पर काम करता है, तो सूचना तब तक बबल के तौर पर नहीं दिखती, जब तक वह बातचीत से जुड़ी ज़रूरी शर्तों को पूरा नहीं करती. अगर कोई ऐप्लिकेशन Android 10 या उससे पहले के वर्शन को टारगेट करता है, तो नीचे दी गई एक या ज़्यादा शर्तें पूरी होने पर ही सूचना बबल के तौर पर दिखती है:

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

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

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

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

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

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

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

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

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

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

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

सैंपल ऐप्लिकेशन

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