با استفاده از Messaging و People API ویژگی‌های مربوط به چت را به برنامه Android اضافه کنید

1. قبل از شروع

ایجاد یک برنامه پیام رسانی چالش برانگیز است. اگرچه تجربه کلی کاربر ذهنی است، Android API های Messaging و People را ارائه می دهد که تجربه چت را بهبود می بخشد و ساده می کند.

در این نرم‌افزار، یاد می‌گیرید که چگونه از این APIها برای ایجاد یک اکوسیستم قانع‌کننده برای برنامه‌های چت در اندروید استفاده کنید. شما برنامه JetChat را گسترش می دهید، یک برنامه چت ساده و غیر کاربردی که از Jetpack compose استفاده می کند.

پیش نیازها

  • دانش اولیه توسعه اندروید
  • دانش اولیه اعلان ها

چیزی که خواهی ساخت

یک برنامه JetChat توسعه یافته که کارهای زیر را انجام می دهد:

  • اعلان‌های سطحی که مکالمات را در بخش مکالمه رزرو شده در کشوی اعلان نشان می‌دهند.
  • مراجع در این اعلان‌ها اهدافی را به اشتراک می‌گذارند که به شما امکان می‌دهد در مکالمات برنامه خود اشتراک‌گذاری کنید.
  • بهترین روش‌ها را برای ایجاد این اشیا اعمال می‌کند تا از تجربیات پیش‌فرض ارائه‌شده توسط سیستمی که برنامه شما را بهبود می‌بخشد، استفاده کند.

چیزی که یاد خواهید گرفت

  • نحوه نمایش اعلان‌های مربوط به مکالمه در بخش مکالمه رزرو شده در کشوی اعلان.
  • نحوه درک تجربیات مختلف فعال شده توسط Messaging و People API.

آنچه شما نیاز دارید

  • Git
  • اندروید استودیو
  • یک حساب GitHub

2. راه اندازی شوید

نقطه شروع بر اساس برنامه JetChat است. کد شروع برنامه JetChat را گسترش می دهد تا API های پیام رسانی و افراد را بهتر به نمایش بگذارد.

کد شروع را دریافت کنید

برای دریافت کد شروع برای این کد لبه، مراحل زیر را دنبال کنید:

  1. از خط فرمان خود، مخزن GitHub زیر را کلون کنید:
git clone –branch starter-code \
https://github.com/android/people-messaging-codelab.git
  1. پروژه را در اندروید استودیو باز کنید و سپس کلیک کنید a1bbb9d97659a043.png برنامه را اجرا کنید پنجره Emulator ظاهر می شود و برنامه را نمایش می دهد.

برنامه توسعه یافته JetChat را کاوش کنید

  1. در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
  2. از برنامه دور شوید. پس از چند ثانیه، یک اعلان فشاری دریافت می‌کنید که حاوی پاسخی از طرف شخصی در چت است.

3. اعلان های مکالمه ایجاد کنید

اندروید 11 APIهایی را معرفی کرد که به اعلان‌های مربوط به چت اجازه می‌دهد در بخش مشخص شده در کشوی اعلان‌ها ظاهر شوند که صرفاً برای مکالمات است.

کشوی اعلان که هنگام کشیدن انگشت به پایین از نوار وضعیت ظاهر می شود

اعلان باید از کلاس Notification.MessagingStyle باشد و به یک میانبر اشتراک گذاری طولانی مدت اشاره کند. در این بخش، یاد می‌گیرید که چگونه این الزامات API را برای نمایش این اعلان‌هایی که مکالمات را در بخش مکالمه نشان می‌دهند، برآورده کنید.

برای اعلان‌های کلاس NotificationCompat.MessagingStyle ، این مراحل را دنبال کنید:

  1. در تب Project Android Studio، روی app > java > com.example.compose.jetchat > conversation کلیک کنید و سپس روی ConversationFragment دوبار کلیک کنید.
  2. در فایل ConversationFragment.kt ، کلاس ConversationFragment را پیدا کنید و سپس بلوک کد Notification تابع createNotification را در جایی که اعلان ایجاد می شود، پیدا کنید.
  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. در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
  3. از برنامه دور شوید. شما دوباره یک اعلان فشار دریافت می کنید، اما سبک متفاوتی دارد. این شامل یک آواتار و سبک متمایز برای پیام است. با این حال، قبل از اینکه اعلان‌های شما در جایی که باید ظاهر شوند، کارهای بیشتری برای انجام دادن وجود دارد.

4. اهداف اشتراک گذاری برای مکالمات ایجاد کنید

باید در اعلان به یک میانبر اشتراک‌گذاری یا هدف اشتراک‌گذاری اشاره کنید. اهداف اشتراک گذاری در فایل shortcuts.xml تعریف می شوند و نقاط ورودی برای مدیریت میانبرهایی هستند که به صورت برنامه نویسی تعریف شده اند. میانبرهایی که ایجاد می کنید نشان دهنده مکالمات در برنامه هستند و به شما امکان می دهند محتوا را در مکالمات خود به اشتراک بگذارید.

اهداف سهم را تعریف کنید

  1. در تب Project ، روی دایرکتوری res راست کلیک کنید و سپس New > Directory را انتخاب کنید.
  2. در کادر متن، xml را وارد کنید و سپس Enter (یا return در macOS) را فشار دهید.
  3. روی پوشه xml کلیک راست کرده و سپس File را انتخاب کنید.
  4. در کادر متن، shortcuts.xml را وارد کنید و سپس Enter (یا return در macOS) را فشار دهید.
  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. در تب Project ، روی 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. در مولفه activity فایل AndroidManifest.xml ، فیلتر قصد را که حاوی منطق اشتراک گذاری است تعریف کنید:

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. در متد createNotification متغیر notification ، 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()
}

میانبر را منتشر کنید

  • برای انتشار میانبر، در تابع simulateResponseAsANotification قبل از متد notificationManager.notify ، متد pushDynamicShortcut را فراخوانی کنید:

ConversationFragment.kt

import androidx.core.content.pm.ShortcutManagerCompat

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

برنامه را اجرا کنید

  1. برنامه را اجرا کنید.
  2. در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
  3. از برنامه دور شوید. دوباره یک اعلان فشاری دریافت می‌کنید، اما به شکل مشخص‌تری به عنوان یک اعلان مربوط به مکالمه طراحی شده است. نماد آواتار بارزتر است و نماد برنامه را یکپارچه می کند. فرستنده، زمان و متن نیز ساده تر هستند.

5. اختیاری: فعال کردن حباب ها

حباب ها در Android 9 معرفی شدند و برای استفاده در زمینه مکالمات در Android 11 بهبود یافته و تغییر کاربری دادند. حباب ها پوشش های دایره ای هستند که آواتار مکالمات شما هستند. آنها در راه‌انداز برنامه ظاهر می‌شوند و به شما اجازه می‌دهند به راحتی به مکالمات در یک حباب بازشده پاسخ دهید. حباب ها حتی در صورت پیاده سازی، بسته به ترجیح کاربر اختیاری هستند.

برای فعال کردن حباب ها، مراحل زیر را دنبال کنید:

  1. در فایل AndroidManifest.xml ، ویژگی های allowEmbedded و resizeableActivity را اضافه کنید و سپس هر کدام را روی یک مقدار true تنظیم کنید:

AndroidManifest.xml

<activity
  ...
  android:allowEmbedded="true"
  android:resizeableActivity="true"
  ...
</activity>
  1. در کلاس ConversationUtil فایل ConversationUtil.kt ، ابرداده حباب را اضافه کنید:

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. در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
  3. از برنامه دور شوید. بعد از چند ثانیه یک اعلان از چت به صورت حباب دریافت می کنید.
  4. روی حباب ضربه بزنید. گفتگو از حباب باز می شود.

یک حباب مکالمه

6. اختیاری: یک پیوند را به اشتراک بگذارید

شما اهداف اشتراک‌گذاری را اعلام کردید و در اعلان‌های خود به آنها ارجاع دادید، که همچنین نمایان شدن مخاطب شما را در Sharesheet فعال کرد، مؤلفه‌ای از پایین به بالا که هنگام ارسال یک هدف ACTION ظاهر می‌شود. اهداف اشتراک گذاری در بالای صفحه اشتراک ظاهر می شوند و به شما امکان می دهند محتوای غنی را در مکالمات خود به اشتراک بگذارید.

برای فراخوانی Sharesheet، مراحل زیر را دنبال کنید:

  1. در دستگاه خود، Google Chrome را باز کنید و سپس به صفحه وب مورد نظر خود مانند developer.android.com بروید.
  2. در صورت لزوم، کلیک کنید 2fdbaccda71bc5f0.png ورت بیشتر
  3. کلیک کنید 771b0be21764f6b6.png به اشتراک بگذارید . Sharesheet در پایین صفحه ظاهر می شود.

برگه اشتراک

  1. در صورت امکان کلیک کنید 468248e6b8a84bb3.png جت چت . URL در چت به اشتراک گذاشته شده است.
  2. اگر نمی بینید 468248e6b8a84bb3.png جت چت ، کلیک کنید 145399af71577431.png بیشتر برای فراخوانی اشتراک‌گذاری سیستم، و سپس انگشت خود را روی ShareSheet به بالا بکشید و کلیک کنید 468248e6b8a84bb3.png جت چت . URL در چت به اشتراک گذاشته می شود.

این یک مثال ساده است. انواع محتوای غنی تری برای اشتراک گذاری وجود دارد. برای اطلاعات بیشتر، به بازیابی داده های ساده از سایر برنامه ها مراجعه کنید.

7. تبریک می گویم

تبریک می گویم! اکنون می‌دانید که چگونه می‌توانید ویژگی‌های مرتبط با چت را با استفاده از APIهای Messaging و People به برنامه Android اضافه کنید. پیام مبارک!

بیشتر بدانید