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

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

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

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

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

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

  • अपने ऐप्लिकेशन से सभी बबल ब्लॉक करें. सूचनाएं ब्लॉक नहीं होतीं, लेकिन वे कभी भी बबल के तौर पर नहीं दिखतीं.
  • अपने ऐप्लिकेशन से सभी बबल दिखाने की अनुमति दें. 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 पर सेट करें.

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

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