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

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

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

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

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

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

लोग ये काम कर सकते हैं:

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

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

  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, 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(context, 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)

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

बड़ा बबल बनाना

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

फ़्लैग सेट करने के लिए, इन तरीकों का इस्तेमाल किया जा सकता है. इनसे ये व्यवहार चालू होते हैं: setAutoExpandBubble() और setSuppressNotification().

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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