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

اعلان باید از کلاس Notification.MessagingStyle باشد و به یک میانبر اشتراکگذاری با طول عمر بالا ارجاع دهد. در این بخش، یاد میگیرید که چگونه این الزامات API را برای نمایش این اعلانها که نشاندهنده مکالمات در بخش مکالمه هستند، برآورده کنید.
برای ایجاد اعلانها (notifications) از کلاس NotificationCompat.MessagingStyle ، مراحل زیر را دنبال کنید:
- در تب Project در اندروید استودیو، روی
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 برنامه، پیامی را وارد کنید و سپس روی «ارسال» ضربه بزنید.
- از برنامه خارج شوید. دوباره یک اعلان دریافت میکنید، اما با سبکی متفاوت. شامل یک آواتار و سبکی متمایز برای پیام است. با این حال، قبل از اینکه اعلانهای شما در جای مناسب خود ظاهر شوند، کارهای بیشتری باید انجام دهید.
۴. برای مکالمات، اهداف اشتراکگذاری ایجاد کنید
شما باید در اعلان، به یک میانبر اشتراکگذاری یا هدف اشتراکگذاری ارجاع دهید. اهداف اشتراکگذاری در فایل shortcuts.xml تعریف شدهاند و نقاط ورودی برای مدیریت میانبرهایی هستند که به صورت برنامهنویسی تعریف شدهاند. میانبرهایی که ایجاد میکنید، نشاندهنده مکالمات موجود در برنامه هستند و به شما امکان میدهند محتوا را در مکالمات خود به اشتراک بگذارید.
اهداف اشتراکگذاری را تعریف کنید
- در تب Project ، روی دایرکتوری
resکلیک راست کرده و سپس New > Directory را انتخاب کنید. - در کادر متن،
xmlرا وارد کنید و سپسEnter(یاreturnدر macOS) را فشار دهید. - روی پوشه
xmlکلیک راست کرده و سپس File را انتخاب کنید. - در کادر متن، عبارت
shortcuts.xmlرا وارد کنید و سپسEnter(یاreturnدر macOS) را فشار دهید. - در فایل
shortcuts.xml، هدف اشتراکگذاری را که اشتراکگذاری دادههای از نوعtext/plainرا مدیریت میکند، تعریف کنید:
میانبرها.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، فیلتر intent را که شامل منطق اشتراکگذاری است، تعریف کنید:
فایل 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>
...
تعریف کلیدهای میانبر
برای هر اعلان، باید میانبر مربوطه را مرتبط کنید. شما فقط یک میانبر منحصر به فرد برای هر مکالمه تعریف میکنید زیرا میانبر منحصر به فرد نشان دهنده یک مخاطب است که باید با آن به اشتراک گذاشته شود.
برای ایجاد میانبر، مراحل زیر را دنبال کنید:
- در تب Project ، روی
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 مورد نیاز برای مکالمه است. person مخاطب مرتبط با میانبر است و تنظیم long-lived روی مقدار 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 برنامه، پیامی را وارد کنید و سپس روی «ارسال» ضربه بزنید.
- از برنامه خارج شوید. دوباره یک اعلان دریافت میکنید، اما به طور مشخصتری به عنوان یک اعلان مربوط به مکالمه طراحی شده است. نماد آواتار برجستهتر شده و با نماد برنامه ادغام شده است. فرستنده، زمان و متن نیز سادهتر شدهاند.
۵. اختیاری: فعال کردن حبابها
حبابها در اندروید ۹ معرفی شدند و در اندروید ۱۱ برای استفاده در زمینه مکالمات بهبود یافته و مجدداً مورد استفاده قرار گرفتند. حبابها پوششهای دایرهای شکلی هستند که آواتار مکالمات شما محسوب میشوند. آنها در لانچر برنامه ظاهر میشوند و به شما امکان میدهند به راحتی در یک حباب بزرگ به مکالمات پاسخ دهید. حتی در صورت پیادهسازی، حبابها بسته به ترجیح کاربر اختیاری هستند.
برای فعال کردن حبابها، مراحل زیر را دنبال کنید:
- در فایل
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 برنامه، پیامی را وارد کنید و سپس روی «ارسال» ضربه بزنید.
- از برنامه خارج شوید. پس از چند ثانیه، اعلانی از چت به شکل حباب دریافت خواهید کرد.
- روی حباب ضربه بزنید. مکالمه از حباب شروع میشود.

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

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