הוספת תכונות שקשורות לצ'אט לאפליקציה ל-Android באמצעות ממשקי ה-API להעברת הודעות ואנשים

1. לפני שמתחילים

יצירת אפליקציית הודעות היא משימה מורכבת. חוויית המשתמש הכוללת היא סובייקטיבית, אבל מערכת Android מספקת את ממשקי ה-API של ההודעות והאנשים, שמשפרים ומייעלים את חוויית הצ'אט.

ב-codelab הזה תלמדו איך להשתמש בממשקי ה-API האלה כדי ליצור מערכת אקולוגית משכנעת לאפליקציות צ'אט ב-Android. אתם מרחיבים את אפליקציית JetChat, אפליקציית צ'אט בסיסית ולא פונקציונלית שמשתמשת ב-Jetpack Compose.

דרישות מוקדמות

  • ידע בסיסי בפיתוח ל-Android
  • ידע בסיסי בנושא התראות

מה תפַתחו

אפליקציית JetChat מורחבת שמבצעת את הפעולות הבאות:

  • ההתראות שמוצגות הן התראות על שיחות, והן מופיעות בקטע השמור של השיחות במגירת ההתראות.
  • ההתראות האלה כוללות הפניות ליעדי שיתוף, שמאפשרות לכם לשתף בשיחות באפליקציה.
  • המערכת אוכפת שיטות מומלצות ליצירת האובייקטים האלה כדי לנצל את חוויות ברירת המחדל שהמערכת מספקת לשיפור האפליקציה.

מה תלמדו

  • איך להציג התראות שקשורות לשיחות בקטע השיחות השמורות במגירת ההתראות.
  • איך להבין את החוויות השונות שמתאפשרות באמצעות ממשקי ה-API של ההודעות והאנשים.

מה תצטרכו

  • Git
  • Android Studio
  • חשבון GitHub

2. להגדרה

נקודת ההתחלה מבוססת על אפליקציית JetChat. קוד לתחילת הדרך מרחיב את אפליקציית JetChat כדי להציג בצורה טובה יותר את ממשקי ה-API של העברת הודעות ו-People.

קבלת קוד לתחילת הדרך

כדי לקבל את קוד לתחילת הדרך של ה-Codelab הזה, פועלים לפי השלבים הבאים:

  1. משכפלים משורת הפקודה את מאגר GitHub הבא:
git clone –branch starter-code \
https://github.com/android/people-messaging-codelab.git
  1. פותחים את הפרויקט ב-Android Studio ולוחצים על a1bbb9d97659a043.png Run app (הפעלת האפליקציה). החלונית Emulator (אמולטור) מופיעה והאפליקציה מוצגת בה.

סקירת האפליקציה המורחבת של JetChat

  1. בתיבת הטקסט Message #composers באפליקציה, כותבים את ההודעה ומקישים על Send (שליחה).
  2. יוצאים מהאפליקציה. אחרי כמה שניות מקבלים התראה בדחיפה עם תשובה ממישהו בצ'אט.

3. יצירת התראות על שיחות

ב-Android 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 ובוחרים באפשרות קובץ.
  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. בקובץ 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>
...

הגדרת קיצורי דרך

לכל התראה צריך לשייך את קיצור הדרך הרלוונטי. אתם מגדירים רק קיצור דרך ייחודי אחד לכל שיחה, כי קיצור הדרך הייחודי מייצג את איש הקשר שאיתו רוצים לשתף.

כדי ליצור קיצור דרך:

  1. בכרטיסייה Project (פרויקט), לוחצים על app > java > com.example.compose.jetchat > conversation > util ואז לוחצים פעמיים על ConversationUtil.
  2. מוסיפים פונקציית 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 לקיצור הדרך מבטיחה שהמערכת תשמור אותו במטמון ותציג אותו במקומות שונים בממשק המשתמש.

הקיצור מופיע בהתראה

צריך להוסיף קישור לקיצור הדרך לשיתוף בהתראה. עם זאת, צריך ליצור את קיצור הדרך לפני ששולחים את ההתראה.

לשם כך, בצע את הצעדים הבאים:

  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()
}

פרסום קיצור הדרך

  • כדי לפרסם את קיצור הדרך, מפעילים את ה-method‏ pushDynamicShortcut בפונקציה simulateResponseAsANotification לפני ה-method‏ notificationManager.notify:

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.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()
    }
  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. אופציונלי: משתפים קישור

הצהרת על יעדי שיתוף והפנית אליהם בהתראות שלך, מה שגם אפשר את הצגת איש הקשר שלך בגיליון השיתוף, רכיב מלמטה למעלה שמופיע כשנשלחת ACTION כוונה. יעדי השיתוף מופיעים בחלק העליון של הקובץ לשיתוף, ומאפשרים לכם לשתף תוכן עשיר בשיחות.

כדי להפעיל את גיליון השיתוף, בצע את השלבים הבאים:

  1. במכשיר, פותחים את Google Chrome ועוברים לדף אינטרנט לפי בחירה, כמו developer.android.com.
  2. אם צריך, לוחצים על סמל האפשרויות הנוספות 2fdbaccda71bc5f0.png עוד.
  3. לוחצים על 771b0be21764f6b6.png שיתוף. גיליון השיתוף מופיע בתחתית המסך.

קובץ לשיתוף

  1. אם אפשר, לוחצים על 468248e6b8a84bb3.png JetChat. הקישור ישותף בצ'אט.
  2. אם לא רואים את 468248e6b8a84bb3.png JetChat, לוחצים על 145399af71577431.png עוד כדי להפעיל את גיליון השיתוף של המערכת, ואז מחליקים למעלה בגיליון השיתוף ולוחצים על 468248e6b8a84bb3.png JetChat. הקישור ישותף בצ'אט.

זוהי דוגמה פשוטה. יש סוגי תוכן עשירים יותר שאפשר לשתף. מידע נוסף זמין במאמר בנושא קבלת נתונים פשוטים מאפליקציות אחרות.

7. מזל טוב

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

מידע נוסף