1. قبل از شروع
ایجاد یک برنامه پیام رسانی چالش برانگیز است. اگرچه تجربه کلی کاربر ذهنی است، Android API های Messaging و People را ارائه می دهد که تجربه چت را بهبود می بخشد و ساده می کند.
در این نرمافزار، یاد میگیرید که چگونه از این APIها برای ایجاد یک اکوسیستم قانعکننده برای برنامههای چت در اندروید استفاده کنید. شما برنامه JetChat را گسترش می دهید، یک برنامه چت ساده و غیر کاربردی که از Jetpack compose استفاده می کند.
پیش نیازها
- دانش اولیه توسعه اندروید
- دانش اولیه اعلان ها
چیزی که خواهی ساخت
یک برنامه JetChat توسعه یافته که کارهای زیر را انجام می دهد:
- اعلانهای سطحی که مکالمات را در بخش مکالمه رزرو شده در کشوی اعلان نشان میدهند.
- مراجع در این اعلانها اهدافی را به اشتراک میگذارند که به شما امکان میدهد در مکالمات برنامه خود اشتراکگذاری کنید.
- بهترین روشها را برای ایجاد این اشیا اعمال میکند تا از تجربیات پیشفرض ارائهشده توسط سیستمی که برنامه شما را بهبود میبخشد، استفاده کند.
چیزی که یاد خواهید گرفت
- نحوه نمایش اعلانهای مربوط به مکالمه در بخش مکالمه رزرو شده در کشوی اعلان.
- نحوه درک تجربیات مختلف فعال شده توسط Messaging و People API.
آنچه شما نیاز دارید
- Git
- اندروید استودیو
- یک حساب GitHub
2. راه اندازی شوید
نقطه شروع بر اساس برنامه JetChat است. کد شروع برنامه JetChat را گسترش می دهد تا API های پیام رسانی و افراد را بهتر به نمایش بگذارد.
کد شروع را دریافت کنید
برای دریافت کد شروع برای این کد لبه، مراحل زیر را دنبال کنید:
- از خط فرمان خود، مخزن GitHub زیر را کلون کنید:
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- پروژه را در اندروید استودیو باز کنید و سپس کلیک کنید
برنامه را اجرا کنید پنجره Emulator ظاهر می شود و برنامه را نمایش می دهد.
برنامه توسعه یافته JetChat را کاوش کنید
- در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
- از برنامه دور شوید. پس از چند ثانیه، یک اعلان فشاری دریافت میکنید که حاوی پاسخی از طرف شخصی در چت است.
3. اعلان های مکالمه ایجاد کنید
اندروید 11 APIهایی را معرفی کرد که به اعلانهای مربوط به چت اجازه میدهد در بخش مشخص شده در کشوی اعلانها ظاهر شوند که صرفاً برای مکالمات است.

اعلان باید از کلاس Notification.MessagingStyle باشد و به یک میانبر اشتراک گذاری طولانی مدت اشاره کند. در این بخش، یاد میگیرید که چگونه این الزامات API را برای نمایش این اعلانهایی که مکالمات را در بخش مکالمه نشان میدهند، برآورده کنید.
برای اعلانهای کلاس NotificationCompat.MessagingStyle ، این مراحل را دنبال کنید:
- در تب Project Android Studio، روی
app>java>com.example.compose.jetchat>conversationکلیک کنید و سپس رویConversationFragmentدوبار کلیک کنید. - در فایل
ConversationFragment.kt، کلاسConversationFragmentرا پیدا کنید و سپس بلوک کدNotificationتابعcreateNotificationرا در جایی که اعلان ایجاد می شود، پیدا کنید. - متد
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()
}
برنامه را اجرا کنید
- برنامه را اجرا کنید.
- در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
- از برنامه دور شوید. شما دوباره یک اعلان فشار دریافت می کنید، اما سبک متفاوتی دارد. این شامل یک آواتار و سبک متمایز برای پیام است. با این حال، قبل از اینکه اعلانهای شما در جایی که باید ظاهر شوند، کارهای بیشتری برای انجام دادن وجود دارد.
4. اهداف اشتراک گذاری برای مکالمات ایجاد کنید
باید در اعلان به یک میانبر اشتراکگذاری یا هدف اشتراکگذاری اشاره کنید. اهداف اشتراک گذاری در فایل shortcuts.xml تعریف می شوند و نقاط ورودی برای مدیریت میانبرهایی هستند که به صورت برنامه نویسی تعریف شده اند. میانبرهایی که ایجاد می کنید نشان دهنده مکالمات در برنامه هستند و به شما امکان می دهند محتوا را در مکالمات خود به اشتراک بگذارید.
اهداف سهم را تعریف کنید
- در تب Project ، روی دایرکتوری
resراست کلیک کنید و سپس New > Directory را انتخاب کنید. - در کادر متن،
xmlرا وارد کنید و سپسEnter(یاreturnدر macOS) را فشار دهید. - روی پوشه
xmlکلیک راست کرده و سپس File را انتخاب کنید. - در کادر متن،
shortcuts.xmlرا وارد کنید و سپسEnter(یاreturnدر macOS) را فشار دهید. - در فایل
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>
- در تب Project ، روی
manifestsکلیک کنید و سپس رویAndroidManifest.xmlدوبار کلیک کنید. - در فایل
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>
- در مولفه
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>
...
میانبرها را تعریف کنید
برای هر اعلان، باید میانبر مربوطه را مرتبط کنید. شما در هر مکالمه فقط یک میانبر منحصر به فرد تعریف می کنید زیرا میانبر منحصر به فرد نشان دهنده مخاطبی است که می توان با آن به اشتراک گذاشت.
برای ایجاد میانبر، مراحل زیر را دنبال کنید:
- در برگه پروژه ، روی
app>java>com.example.compose.jetchat>conversation>utilکلیک کنید و سپس رویConversationUtilدوبار کلیک کنید. - در فایل
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 تضمین می کند که این میانبر توسط سیستم کش می شود و در سطوح مختلف در رابط کاربری ظاهر می شود.
به میانبر در اعلان مراجعه کنید
باید به میانبر اشتراکگذاری در اعلان اشاره کنید. با این حال، قبل از فشار دادن اعلان، باید میانبر را ایجاد کنید.
برای انجام این کار، این مراحل را دنبال کنید:
- در فایل
ConversationFragment.kt، کلاسConversationFragmentرا پیدا کنید. - قبل از تماس با متغیر
notification، یک متغیرshortcutایجاد کنید که به میانبر ایجاد شده ازConversationUtil.generateShortcutاشاره می کند. - در متد
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)
...
}
}
- در متد
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)
...
}
}
برنامه را اجرا کنید
- برنامه را اجرا کنید.
- در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
- از برنامه دور شوید. دوباره یک اعلان فشاری دریافت میکنید، اما به شکل مشخصتری به عنوان یک اعلان مربوط به مکالمه طراحی شده است. نماد آواتار بارزتر است و نماد برنامه را یکپارچه می کند. فرستنده، زمان و متن نیز ساده تر هستند.
5. اختیاری: فعال کردن حباب ها
حباب ها در Android 9 معرفی شدند و برای استفاده در زمینه مکالمات در Android 11 بهبود یافته و تغییر کاربری دادند. حباب ها پوشش های دایره ای هستند که آواتار مکالمات شما هستند. آنها در راهانداز برنامه ظاهر میشوند و به شما اجازه میدهند به راحتی به مکالمات در یک حباب بازشده پاسخ دهید. حباب ها حتی در صورت پیاده سازی، بسته به ترجیح کاربر اختیاری هستند.
برای فعال کردن حباب ها، مراحل زیر را دنبال کنید:
- در فایل
AndroidManifest.xml، ویژگی هایallowEmbeddedوresizeableActivityرا اضافه کنید و سپس هر کدام را روی یک مقدارtrueتنظیم کنید:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
- در کلاس
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()
}
- در فایل
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()
}
برنامه را اجرا کنید
- برنامه را اجرا کنید.
- در کادر نوشتاری Message #composers برنامه، پیامی را وارد کنید و سپس روی Send ضربه بزنید.
- از برنامه دور شوید. بعد از چند ثانیه یک اعلان از چت به صورت حباب دریافت می کنید.
- روی حباب ضربه بزنید. گفتگو از حباب باز می شود.

6. اختیاری: یک پیوند را به اشتراک بگذارید
شما اهداف اشتراکگذاری را اعلام کردید و در اعلانهای خود به آنها ارجاع دادید، که همچنین نمایان شدن مخاطب شما را در Sharesheet فعال کرد، مؤلفهای از پایین به بالا که هنگام ارسال یک هدف ACTION ظاهر میشود. اهداف اشتراک گذاری در بالای صفحه اشتراک ظاهر می شوند و به شما امکان می دهند محتوای غنی را در مکالمات خود به اشتراک بگذارید.
برای فراخوانی Sharesheet، مراحل زیر را دنبال کنید:
- در دستگاه خود، Google Chrome را باز کنید و سپس به صفحه وب مورد نظر خود مانند developer.android.com بروید.
- در صورت لزوم، کلیک کنید
ورت بیشتر - کلیک کنید
به اشتراک بگذارید . Sharesheet در پایین صفحه ظاهر می شود.

- در صورت امکان کلیک کنید
جت چت . URL در چت به اشتراک گذاشته شده است. - اگر نمی بینید
جت چت ، کلیک کنید
بیشتر برای فراخوانی اشتراکگذاری سیستم، و سپس انگشت خود را روی ShareSheet به بالا بکشید و کلیک کنید
جت چت . URL در چت به اشتراک گذاشته می شود.
این یک مثال ساده است. انواع محتوای غنی تری برای اشتراک گذاری وجود دارد. برای اطلاعات بیشتر، به بازیابی داده های ساده از سایر برنامه ها مراجعه کنید.
7. تبریک می گویم
تبریک می گویم! اکنون میدانید که چگونه میتوانید ویژگیهای مرتبط با چت را با استفاده از APIهای Messaging و People به برنامه Android اضافه کنید. پیام مبارک!