1. ก่อนเริ่มต้น
การสร้างแอปรับส่งข้อความเป็นเรื่องที่ท้าทาย แม้ว่าประสบการณ์โดยรวมของผู้ใช้จะเป็นเรื่องส่วนบุคคล แต่ Android ก็มี Messaging API และ People API ซึ่งช่วยปรับปรุงและเพิ่มประสิทธิภาพประสบการณ์การแชท
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ API เหล่านี้เพื่อสร้างระบบนิเวศที่น่าสนใจสำหรับแอปแชทใน Android คุณจะขยายแอป JetChat ซึ่งเป็นแอปแชทแบบพื้นฐานที่ไม่มีฟังก์ชันการทำงานและใช้ Jetpack Compose
ข้อกำหนดเบื้องต้น
- มีความรู้พื้นฐานเกี่ยวกับการพัฒนาแอป Android
- ความรู้พื้นฐานเกี่ยวกับการแจ้งเตือน
สิ่งที่คุณจะสร้าง
แอป JetChat แบบขยายซึ่งทำสิ่งต่อไปนี้
- แสดงการแจ้งเตือนที่แสดงถึงการสนทนาในส่วนการสนทนาที่สงวนไว้ของลิ้นชักการแจ้งเตือน
- การอ้างอิงจะแชร์เป้าหมายในการแจ้งเตือนเหล่านี้ ซึ่งช่วยให้คุณแชร์ไปยังการสนทนาของแอปได้
- บังคับใช้แนวทางปฏิบัติแนะนำสำหรับการสร้างออบเจ็กต์เหล่านี้เพื่อใช้ประโยชน์จากประสบการณ์เริ่มต้นที่ระบบมอบให้ซึ่งจะช่วยปรับปรุงแอป
สิ่งที่คุณจะได้เรียนรู้
- วิธีแสดงการแจ้งเตือนที่เกี่ยวข้องกับการสนทนาในส่วนการสนทนาที่สงวนไว้ของลิ้นชักการแจ้งเตือน
- วิธีทำความเข้าใจประสบการณ์ต่างๆ ที่ API การรับส่งข้อความและ API ผู้ใช้เปิดใช้
สิ่งที่คุณต้องมี
- Git
- Android Studio
- บัญชี GitHub
2. ตั้งค่า
จุดเริ่มต้นจะอิงตามแอป JetChat โค้ดเริ่มต้นจะขยายแอป JetChat เพื่อแสดง Messaging API และ People API ได้ดียิ่งขึ้น
รับโค้ดเริ่มต้น
หากต้องการรับโค้ดเริ่มต้นสำหรับ Codelab นี้ ให้ทำตามขั้นตอนต่อไปนี้
- จากบรรทัดคำสั่ง ให้โคลนที่เก็บ GitHub ต่อไปนี้
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- เปิดโปรเจ็กต์ใน Android Studio แล้วคลิก
Run app แผง Emulator จะปรากฏขึ้นและแสดงแอป
สำรวจแอป JetChat เวอร์ชันขยาย
- ในกล่องข้อความผู้แต่งข้อความของแอป ให้ป้อนข้อความแล้วแตะส่ง
- ออกจากแอป หลังจากผ่านไปสักครู่ คุณจะได้รับการแจ้งเตือนแบบพุชที่มีคำตอบจากบุคคลในแชท
3. สร้างการแจ้งเตือนการสนทนา
Android 11 เปิดตัว API ที่อนุญาตให้การแจ้งเตือนที่เกี่ยวข้องกับการแชทปรากฏในส่วนที่กำหนดในลิ้นชักการแจ้งเตือน ซึ่งมีไว้สำหรับการสนทนาโดยเฉพาะ

การแจ้งเตือนต้องอยู่ในคลาส Notification.MessagingStyle และอ้างอิงทางลัดการแชร์ ที่แสดงอยู่ตลอด ในส่วนนี้ คุณจะได้เรียนรู้วิธีปฏิบัติตามข้อกำหนดของ API เหล่านี้เพื่อแสดงการแจ้งเตือนที่แสดงถึงการสนทนาในส่วนการสนทนา
หากต้องการเปิดใช้การแจ้งเตือนสำหรับชั้นเรียน NotificationCompat.MessagingStyle ให้ทำตามขั้นตอนต่อไปนี้
- ในแท็บโปรเจ็กต์ของ 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()
}
เรียกใช้แอป
- เรียกใช้แอป
- ในกล่องข้อความผู้แต่งข้อความของแอป ให้ป้อนข้อความแล้วแตะส่ง
- ออกจากแอป คุณจะได้รับข้อความ Push อีกครั้ง แต่มีรูปแบบต่างออกไป โดยจะมีอวาตาร์และสไตล์ที่โดดเด่นสำหรับข้อความ อย่างไรก็ตาม คุณต้องดำเนินการเพิ่มเติมก่อนที่การแจ้งเตือนจะปรากฏในตำแหน่งที่ควร
4. สร้างเป้าหมายการแชร์สำหรับการสนทนา
คุณต้องอ้างอิงทางลัดการแชร์หรือเป้าหมายการแชร์ในการแจ้งเตือน เป้าหมายการแชร์กำหนดไว้ในไฟล์ shortcuts.xml และเป็นจุดแรกเข้าในการจัดการทางลัดที่กำหนดไว้โดยโปรแกรม โดยทางลัดที่คุณสร้างจะแสดงถึงการสนทนาในแอป และช่วยให้คุณแชร์เนื้อหาในการสนทนาได้
กำหนดเป้าหมายส่วนแบ่ง
- ในแท็บโปรเจ็กต์ ให้คลิกขวาที่ไดเรกทอรี
resแล้วเลือกใหม่ > ไดเรกทอรี - ป้อน
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>
- ในแท็บโปรเจ็กต์ ให้คลิก
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>
...
กำหนดทางลัด
คุณต้องเชื่อมโยงทางลัดที่เกี่ยวข้องกับการแจ้งเตือนทุกรายการ คุณกำหนดได้เพียงแป้นพิมพ์ลัดที่ไม่ซ้ำกัน 1 รายการต่อการสนทนา เนื่องจากแป้นพิมพ์ลัดที่ไม่ซ้ำกันแสดงถึงรายชื่อติดต่อ 1 รายการที่จะแชร์ด้วย
หากต้องการสร้างทางลัด ให้ทำตามขั้นตอนต่อไปนี้
- ในแท็บโปรเจ็กต์ ให้คลิก
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 จะช่วยให้มั่นใจได้ว่าระบบจะแคชทางลัดนี้และแสดงในแพลตฟอร์มต่างๆ ใน UI
อ้างอิงทางลัดในการแจ้งเตือน
คุณต้องอ้างอิงทางลัดการแชร์ในการแจ้งเตือน อย่างไรก็ตาม คุณต้องสร้างทางลัดก่อนที่จะพุชการแจ้งเตือน
โดยทำตามขั้นตอนต่อไปนี้
- ในไฟล์
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()
}
เผยแพร่ทางลัด
- หากต้องการเผยแพร่ทางลัด ให้เรียกใช้เมธอด
pushDynamicShortcutในฟังก์ชันsimulateResponseAsANotificationก่อนเมธอดnotificationManager.notify
ConversationFragment.kt
import androidx.core.content.pm.ShortcutManagerCompat
...private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
...
}
}
เรียกใช้แอป
- เรียกใช้แอป
- ในกล่องข้อความผู้แต่งข้อความของแอป ให้ป้อนข้อความแล้วแตะส่ง
- ออกจากแอป คุณจะได้รับการแจ้งเตือนแบบพุชอีกครั้ง แต่การแจ้งเตือนนี้จะมีรูปแบบที่ชัดเจนมากขึ้นในฐานะการแจ้งเตือนที่เกี่ยวข้องกับการสนทนา ไอคอนอวาตาร์จะโดดเด่นมากขึ้นและผสานรวมกับไอคอนแอป นอกจากนี้ ผู้ส่ง เวลา และข้อความยังได้รับการปรับปรุงให้มีประสิทธิภาพมากขึ้นด้วย
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()
}
เรียกใช้แอป
- เรียกใช้แอป
- ในกล่องข้อความผู้แต่งข้อความของแอป ให้ป้อนข้อความแล้วแตะส่ง
- ออกจากแอป หลังจากผ่านไป 2-3 วินาที คุณจะได้รับการแจ้งเตือนจากแชทในรูปแบบของบับเบิล
- แตะบับเบิล การสนทนาจะเปิดขึ้นจากบับเบิล

6. ไม่บังคับ: แชร์ลิงก์
คุณประกาศเป้าหมายการแชร์และอ้างอิงเป้าหมายเหล่านั้นในการแจ้งเตือน ซึ่งยังช่วยให้รายชื่อติดต่อของคุณปรากฏในชีตการแชร์ด้วย ซึ่งเป็นคอมโพเนนต์จากล่างขึ้นบนที่จะปรากฏเมื่อมีการส่งACTION Intent เป้าหมายการแชร์จะปรากฏที่ด้านบนของ Sharesheet และช่วยให้คุณแชร์เนื้อหาที่สมบูรณ์ในการสนทนาได้
หากต้องการเรียกใช้ชีตการแชร์ ให้ทำตามขั้นตอนต่อไปนี้
- เปิด Google Chrome ในอุปกรณ์ แล้วไปที่หน้าเว็บที่คุณต้องการ เช่น developer.android.com
- หากจำเป็น ให้คลิก
More vert - คลิก
แชร์ แชร์ชีตจะปรากฏที่ด้านล่างของหน้าจอ

- หากเป็นไปได้ ให้คลิก
JetChat เมื่อมีการแชร์ URL ในแชท - หากไม่เห็น
JetChat ให้คลิก
เพิ่มเติมเพื่อเรียกใช้แชร์ชีตของระบบ จากนั้นปัดขึ้นในแชร์ชีตแล้วคลิก
JetChat เมื่อมีการแชร์ URL ในแชท
นี่เป็นตัวอย่างง่ายๆ มีเนื้อหาประเภทต่างๆ ที่แชร์ได้มากขึ้น ดูข้อมูลเพิ่มเติมได้ที่การดึงข้อมูลอย่างง่ายจากแอปอื่นๆ
7. ขอแสดงความยินดี
ยินดีด้วย ตอนนี้คุณก็ได้ทราบวิธีเพิ่มฟีเจอร์ที่เกี่ยวข้องกับการแชทลงในแอป Android ด้วย Messaging API และ People API แล้ว ขอให้สนุกกับการรับส่งข้อความ