Messaging और People API की मदद से, किसी Android ऐप्लिकेशन में चैट से जुड़ी सुविधाएं जोड़ना

1. शुरू करने से पहले

मैसेजिंग ऐप्लिकेशन बनाना मुश्किल है. हालांकि, उपयोगकर्ता अनुभव हर व्यक्ति के हिसाब से अलग-अलग होता है. Android, Messaging और People API उपलब्ध कराता है. इनसे चैट करने का अनुभव बेहतर होता है और चैट करने की प्रोसेस आसान हो जाती है.

इस कोडलैब में, Android पर चैट ऐप्लिकेशन के लिए एक बेहतरीन इकोसिस्टम बनाने के लिए, इन एपीआई का इस्तेमाल करने का तरीका बताया गया है. आपको JetChat ऐप्लिकेशन को बेहतर बनाना है. यह एक बुनियादी और काम न करने वाला चैट ऐप्लिकेशन है, जो Jetpack Compose का इस्तेमाल करता है.

ज़रूरी शर्तें

  • Android डेवलपमेंट की बुनियादी जानकारी
  • सूचनाओं के बारे में बुनियादी जानकारी

आपको क्या बनाने को मिलेगा

JetChat का एक्सटेंडेड ऐप्लिकेशन, जो ये काम करता है:

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

आपको क्या सीखने को मिलेगा

  • सूचना पैनल के 'आरक्षित बातचीत' सेक्शन में, बातचीत से जुड़ी सूचनाएं कैसे दिखें.
  • Messaging और People API की मदद से उपलब्ध कराई जाने वाली अलग-अलग सुविधाओं के बारे में जानकारी.

आपको इन चीज़ों की ज़रूरत होगी

  • Git
  • Android Studio
  • GitHub खाता

2. सेट अप करें

यह JetChat ऐप्लिकेशन पर आधारित है. स्टार्टर कोड, JetChat ऐप्लिकेशन को बेहतर बनाता है, ताकि Messaging और People API को बेहतर तरीके से दिखाया जा सके.

स्टार्टर कोड पाना

इस कोडलैब के लिए स्टार्टर कोड पाने के लिए, यह तरीका अपनाएं:

  1. अपनी कमांड लाइन से, GitHub की इस रिपॉज़िटरी को क्लोन करें:
git clone –branch starter-code \
https://github.com/android/people-messaging-codelab.git
  1. Android Studio में प्रोजेक्ट खोलें. इसके बाद, a1bbb9d97659a043.png ऐप्लिकेशन चलाएं पर क्लिक करें. एम्युलेटर पैनल दिखता है और ऐप्लिकेशन दिखाता है.

JetChat ऐप्लिकेशन के एक्सटेंशन के बारे में जानें

  1. ऐप्लिकेशन के मैसेज #कंपोज़र टेक्स्ट बॉक्स में, मैसेज डालें. इसके बाद, भेजें पर टैप करें.
  2. ऐप्लिकेशन से बाहर निकलें. कुछ सेकंड बाद, आपको एक पुश नोटिफ़िकेशन मिलेगा. इसमें चैट में शामिल किसी व्यक्ति का जवाब होगा.

3. बातचीत से जुड़ी सूचनाएं बनाना

Android 11 में एपीआई पेश किए गए थे. इनकी मदद से, चैट से जुड़ी सूचनाओं को सूचना पैनल के एक तय सेक्शन में दिखाया जा सकता है. यह सेक्शन सिर्फ़ बातचीत के लिए होता है.

स्टेटस बार से नीचे की ओर स्वाइप करने पर दिखने वाला सूचना पैनल

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

NotificationCompat.MessagingStyle क्लास की सूचनाएं पाने के लिए, यह तरीका अपनाएं:

  1. Android Studio के प्रोजेक्ट टैब में, app > java > com.example.compose.jetchat > conversation पर क्लिक करें. इसके बाद, ConversationFragment पर दो बार क्लिक करें.
  2. ConversationFragment.kt फ़ाइल में, ConversationFragment क्लास ढूंढें. इसके बाद, createNotification फ़ंक्शन का Notification कोड ब्लॉक ढूंढें, जहां सूचना बनाई गई है.
  3. setContentText तरीके को ऐसे setStyle तरीके से बदलें जो सूचना की स्टाइल को NotificationCompat.MessagingStyle क्लास पर सेट करता हो. यह हेल्पर क्लास, setContextText तरीके से सेट किए गए मैसेज को जोड़ती है. साथ ही, मैसेज से जुड़ा अतिरिक्त कॉन्टेक्स्ट भी जोड़ती है. जैसे, मैसेज भेजने का समय और मैसेज भेजने वाले व्यक्ति का नाम.

ConversationFragment.kt

private fun createNotification(
   notificationId: Int,
   message: Message,
   person: Person,
   shortcut: ShortcutInfoCompat,
   time: Long
): Notification? {
    ...
    .setStyle(NotificationCompat.MessagingStyle(person).addMessage(
                      NotificationCompat.MessagingStyle.Message(
                          message.content,
                          time,
                          person
                      )
    )
    )
    ...
    .build()
}

ऐप्लिकेशन चलाना

  1. ऐप्लिकेशन चलाएं.
  2. ऐप्लिकेशन के मैसेज #कंपोज़र टेक्स्ट बॉक्स में, मैसेज डालें. इसके बाद, भेजें पर टैप करें.
  3. ऐप्लिकेशन से बाहर निकलें. आपको फिर से पुश नोटिफ़िकेशन मिलेगा, लेकिन इसका स्टाइल अलग होगा. इसमें अवतार और मैसेज के लिए अलग स्टाइल शामिल होती है. हालांकि, सूचनाएं सही जगह पर दिखने से पहले, हमें कुछ और काम करने होंगे.

4. बातचीत के लिए शेयर करने के टारगेट बनाना

आपको सूचना में, शेयर करने के शॉर्टकट या शेयर करने के टारगेट का रेफ़रंस देना होगा. शेयर टारगेट, shortcuts.xml फ़ाइल में तय किए जाते हैं. ये प्रोग्राम के हिसाब से तय किए गए शॉर्टकट को मैनेज करने के एंट्री पॉइंट होते हैं. आपके बनाए गए शॉर्टकट, ऐप्लिकेशन में की गई बातचीत को दिखाते हैं. साथ ही, इनसे बातचीत में कॉन्टेंट शेयर किया जा सकता है.

शेयर के टारगेट तय करना

  1. प्रोजेक्ट टैब में, res डायरेक्ट्री पर राइट क्लिक करें. इसके बाद, नया > डायरेक्ट्री चुनें.
  2. टेक्स्ट बॉक्स में, xml डालें. इसके बाद, Enter (macOS पर return) दबाएं.
  3. xml डायरेक्ट्री पर राइट क्लिक करें. इसके बाद, फ़ाइल चुनें.
  4. टेक्स्ट बॉक्स में, shortcuts.xml डालें. इसके बाद, Enter (macOS पर return) दबाएं.
  5. shortcuts.xml फ़ाइल में, शेयर टारगेट का एलान करें. यह text/plain टाइप के डेटा को शेयर करने की सुविधा देता है:

shortcuts.xml

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <share-target android:targetClass="com.example.compose.jetchat.NavActivity">
   <data android:mimeType="text/plain" />
   <category android:name="com.example.compose.jetchat.share.TEXT_SHARE_TARGET" />
 </share-target>
</shortcuts>
  1. प्रोजेक्ट टैब में, manifests पर क्लिक करें. इसके बाद, AndroidManifest.xml पर दो बार क्लिक करें.
  2. AndroidManifest.xml फ़ाइल में, shortcuts.xml फ़ाइल तय करें:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.compose.jetchat">

   <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.Jetchat.NoActionBar">
...
 <meta-data android:name="android.app.shortcuts"
            android:resource="@xml/shortcuts" />

    </application>
</manifest>
  1. AndroidManifest.xml फ़ाइल के activity कॉम्पोनेंट में, शेयर करने का लॉजिक शामिल करने वाला इंटेंट फ़िल्टर तय करें:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.compose.jetchat">

   ...
       <activity
           ...
           <intent-filter>
               <action android:name="android.intent.action.SEND" />
               <category android:name="android.intent.category.DEFAULT" />
               <data android:mimeType="text/plain" />
           </intent-filter>
...

शॉर्टकट तय करना

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

शॉर्टकट जनरेट करने के लिए, यह तरीका अपनाएं:

  1. प्रोजेक्ट टैब में, app > java > com.example.compose.jetchat > conversation > util पर क्लिक करें. इसके बाद, ConversationUtil पर दो बार क्लिक करें.
  2. ConversationUtil.kt फ़ाइल में, generateShortcut फ़ंक्शन जोड़ें:

ConversationUtil.kt

import android.content.Intent
import androidx.core.content.pm.ShortcutInfoCompat
import com.example.compose.jetchat.NavActivity

class ConversationUtil {

   companion object {
...
fun generateShortcut(context: Context, shortcutId: String): ShortcutInfoCompat {
   return ShortcutInfoCompat.Builder(context, shortcutId)
   .setCategories(setOf(CATEGORY_SHARE))
   .setLongLived(true)
   .setShortLabel(shortcutId)
   .setLongLabel(shortcutId)
   .setIntent(
       Intent(context, NavActivity::class.java)
           .setAction(Intent.ACTION_VIEW)
   )
   .build()
}

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

सूचना में मौजूद शॉर्टकट का इस्तेमाल करना

आपको सूचना में शेयरिंग शॉर्टकट का रेफ़रंस देना होगा. हालांकि, सूचना भेजने से पहले आपको शॉर्टकट बनाना होगा.

ऐसा करने के लिए, इन चरणों का अनुसरण करें:

  1. ConversationFragment.kt फ़ाइल में, ConversationFragment क्लास ढूंढें.
  2. notification वैरिएबल को कॉल करने से पहले, एक shortcut वैरिएबल बनाएँ. यह ConversationUtil.generateShortcut से जनरेट किए गए शॉर्टकट को रेफ़रंस करता है.
  3. notification वैरिएबल के createNotification तरीके में, null को shortcut वैरिएबल से बदलें.

ConversationFragment.kt

private fun simulateResponseAsANotification() {
   ...
   if (message.author != "me") {
       ...
       val shortcut = ConversationUtil.generateShortcut(context!!, message.author)
       val notification = createNotification(notificationId, message, person, shortcut, time)
       ...
   }
}
  1. createNotification तरीके में, NotificationCompat.Builder#setShortcutInfo तरीका जोड़ें. इसके बाद, shortcut वैरिएबल को पैरामीटर के तौर पर पास करें.

ConversationFragment.kt

private fun createNotification(
  notificatoinIf: Int,
  messagin: Message,
  person: Person,
  shortcut: ShortcutInfoCompat?,
  time: Long
): Notification {
...
return NotificationCompat.Builder(context!!,  ConversationUtil.CHANNEL_MESSAGES)
   ...
   .setShortcutInfo(shortcut)
   .build()
}

शॉर्टकट पब्लिश करना

  • शॉर्टकट पब्लिश करने के लिए, notificationManager.notify तरीके से पहले simulateResponseAsANotification फ़ंक्शन में, pushDynamicShortcut तरीके को कॉल करें:

ConversationFragment.kt

import androidx.core.content.pm.ShortcutManagerCompat

...private fun simulateResponseAsANotification() {
   ...
   if (message.author != "me") {
       ...
       ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
       ...
   }
}

ऐप्लिकेशन चलाना

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

5. ज़रूरी नहीं: बबल्स की सुविधा चालू करना

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

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

  1. AndroidManifest.xml फ़ाइल में, allowEmbedded और resizeableActivity एट्रिब्यूट जोड़ें. इसके बाद, हर एट्रिब्यूट के लिए true वैल्यू सेट करें:

AndroidManifest.xml

<activity
  ...
  android:allowEmbedded="true"
  android:resizeableActivity="true"
  ...
</activity>
  1. ConversationUtil.kt फ़ाइल ConversationUtil क्लास में, बबल मेटाडेटा जोड़ें:

ConversationUtil.kt

import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat


fun createBubbleMetadata(context: Context, icon: IconCompat): NotificationCompat.BubbleMetadata {
        // Create bubble intent
        val target = Intent(context, NavActivity::class.java)
        val bubbleIntent = PendingIntent.getActivity(context, REQUEST_BUBBLE, target, flagUpdateCurrent(mutable = true))

        // Create bubble metadata
        return NotificationCompat.BubbleMetadata.Builder(bubbleIntent, icon)
            .setDesiredHeight(400)
            .setSuppressNotification(true)
            .build()
    }
  1. ConversationFragment.kt फ़ाइल में, सूचना पर बबल मेटाडेटा बनाएं और उसे रेफ़रंस करें:

ConversationFragment.kt

private fun createNotification(
  notificatoinIf: Int,
  messagin: Message,
  person: Person,
  shortcut: ShortcutInfoCompat?,
  time: Long
): Notification {
...
// Reference the bubble metadata in the notification.
  return NotificationCompat.Builder(context!!,     ConversationUtil.CHANNEL_MESSAGES)
    ...
     .setBubbleMetadata(ConversationUtil.createBubbleMetadata(context!!, person.icon!!))
...
    .build()
}

ऐप्लिकेशन चलाना

  1. ऐप्लिकेशन चलाएं.
  2. ऐप्लिकेशन के मैसेज #कंपोज़र टेक्स्ट बॉक्स में, मैसेज डालें. इसके बाद, भेजें पर टैप करें.
  3. ऐप्लिकेशन से बाहर निकलें. कुछ सेकंड बाद, आपको चैट की सूचना बबल के तौर पर मिलेगी.
  4. बबल पर टैप करें. बबल से बातचीत खुल जाती है.

बातचीत का बबल

6. ज़रूरी नहीं: लिंक शेयर करना

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

शेयरशीट को चालू करने के लिए, यह तरीका अपनाएं:

  1. अपने डिवाइस पर, Google Chrome खोलें. इसके बाद, अपनी पसंद का कोई वेब पेज खोलें. जैसे, developer.android.com.
  2. अगर ज़रूरी हो, तो 2fdbaccda71bc5f0.png ज़्यादा पर क्लिक करें.
  3. 771b0be21764f6b6.png शेयर करें पर क्लिक करें. शेयरशीट, स्क्रीन पर सबसे नीचे दिखती है.

शेयरशीट

  1. अगर हो सके, तो 468248e6b8a84bb3.png JetChat पर क्लिक करें. यूआरएल को चैट में शेयर किया जाता है.
  2. अगर आपको 468248e6b8a84bb3.png JetChat नहीं दिखता है, तो सिस्टम की शेयरशीट खोलने के लिए, 145399af71577431.png ज़्यादा पर क्लिक करें. इसके बाद, शेयरशीट पर ऊपर की ओर स्वाइप करें और 468248e6b8a84bb3.png JetChat पर क्लिक करें. यूआरएल को चैट में शेयर किया जाता है.

यह एक सामान्य उदाहरण है. शेयर करने के लिए, ज़्यादा बेहतर कॉन्टेंट टाइप उपलब्ध हैं. ज़्यादा जानकारी के लिए, दूसरे ऐप्लिकेशन से आसान डेटा पाना लेख पढ़ें.

7. बधाई हो

बधाई हो! अब आपको पता है कि Messaging और People API की मदद से, Android ऐप्लिकेशन में चैट से जुड़ी सुविधाएं कैसे जोड़ी जाती हैं. मैसेज भेजने का आनंद लें!

ज़्यादा जानें