1. לפני שמתחילים
יצירת אפליקציית הודעות היא משימה מורכבת. חוויית המשתמש הכוללת היא סובייקטיבית, אבל מערכת Android מספקת את ממשקי ה-API של ההודעות והאנשים, שמשפרים ומייעלים את חוויית הצ'אט.
ב-codelab הזה תלמדו איך להשתמש בממשקי ה-API האלה כדי ליצור מערכת אקולוגית משכנעת לאפליקציות צ'אט ב-Android. אתם מרחיבים את אפליקציית JetChat, אפליקציית צ'אט בסיסית ולא פונקציונלית שמשתמשת ב-Jetpack Compose.
דרישות מוקדמות
- ידע בסיסי בפיתוח ל-Android
- ידע בסיסי בנושא התראות
מה תפַתחו
אפליקציית JetChat מורחבת שמבצעת את הפעולות הבאות:
- ההתראות שמוצגות הן התראות על שיחות, והן מופיעות בקטע השמור של השיחות במגירת ההתראות.
- ההתראות האלה כוללות הפניות ליעדי שיתוף, שמאפשרות לכם לשתף בשיחות באפליקציה.
- המערכת אוכפת שיטות מומלצות ליצירת האובייקטים האלה כדי לנצל את חוויות ברירת המחדל שהמערכת מספקת לשיפור האפליקציה.
מה תלמדו
- איך להציג התראות שקשורות לשיחות בקטע השיחות השמורות במגירת ההתראות.
- איך להבין את החוויות השונות שמתאפשרות באמצעות ממשקי ה-API של ההודעות והאנשים.
מה תצטרכו
- Git
- Android Studio
- חשבון GitHub
2. להגדרה
נקודת ההתחלה מבוססת על אפליקציית JetChat. קוד לתחילת הדרך מרחיב את אפליקציית JetChat כדי להציג בצורה טובה יותר את ממשקי ה-API של העברת הודעות ו-People.
קבלת קוד לתחילת הדרך
כדי לקבל את קוד לתחילת הדרך של ה-Codelab הזה, פועלים לפי השלבים הבאים:
- משכפלים משורת הפקודה את מאגר GitHub הבא:
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- פותחים את הפרויקט ב-Android Studio ולוחצים על
Run app (הפעלת האפליקציה). החלונית Emulator (אמולטור) מופיעה והאפליקציה מוצגת בה.
סקירת האפליקציה המורחבת של JetChat
- בתיבת הטקסט Message #composers באפליקציה, כותבים את ההודעה ומקישים על Send (שליחה).
- יוצאים מהאפליקציה. אחרי כמה שניות מקבלים התראה בדחיפה עם תשובה ממישהו בצ'אט.
3. יצירת התראות על שיחות
ב-Android 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ובוחרים באפשרות קובץ. - בתיבת הטקסט, מזינים
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>
- בקובץ
AndroidManifest.xml, ברכיבactivity, מגדירים את מסנן ה-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. - מוסיפים פונקציית
generateShortcutלקובץConversationUtil.kt:
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()
}
פרסום קיצור הדרך
- כדי לפרסם את קיצור הדרך, מפעילים את ה-method
pushDynamicShortcutבפונקציהsimulateResponseAsANotificationלפני ה-methodnotificationManager.notify:
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.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()
}
- בקובץ
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. אופציונלי: משתפים קישור
הצהרת על יעדי שיתוף והפנית אליהם בהתראות שלך, מה שגם אפשר את הצגת איש הקשר שלך בגיליון השיתוף, רכיב מלמטה למעלה שמופיע כשנשלחת ACTION כוונה. יעדי השיתוף מופיעים בחלק העליון של הקובץ לשיתוף, ומאפשרים לכם לשתף תוכן עשיר בשיחות.
כדי להפעיל את גיליון השיתוף, בצע את השלבים הבאים:
- במכשיר, פותחים את Google Chrome ועוברים לדף אינטרנט לפי בחירה, כמו developer.android.com.
- אם צריך, לוחצים על סמל האפשרויות הנוספות
עוד. - לוחצים על
שיתוף. גיליון השיתוף מופיע בתחתית המסך.

- אם אפשר, לוחצים על
JetChat. הקישור ישותף בצ'אט. - אם לא רואים את
JetChat, לוחצים על
עוד כדי להפעיל את גיליון השיתוף של המערכת, ואז מחליקים למעלה בגיליון השיתוף ולוחצים על
JetChat. הקישור ישותף בצ'אט.
זוהי דוגמה פשוטה. יש סוגי תוכן עשירים יותר שאפשר לשתף. מידע נוסף זמין במאמר בנושא קבלת נתונים פשוטים מאפליקציות אחרות.
7. מזל טוב
מעולה! עכשיו אתם יודעים איך להוסיף לאפליקציית Android תכונות שקשורות לצ'אט באמצעות ממשקי ה-API של Messaging ו-People. שליחת הודעות נעימה!