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 اضافه کنید. پیام مبارک!