1. Trước khi bắt đầu
Không dễ để tạo một ứng dụng nhắn tin. Mặc dù trải nghiệm người dùng tổng thể mang tính chủ quan, nhưng Android cung cấp các API Nhắn tin và Mọi người, giúp cải thiện và đơn giản hoá trải nghiệm trò chuyện.
Trong lớp học lập trình này, bạn tìm hiểu cách sử dụng các API này để tạo ra một hệ sinh thái hấp dẫn cho các ứng dụng trò chuyện trên Android. Bạn mở rộng ứng dụng JetChat, một ứng dụng trò chuyện đơn giản và không hoạt động và sử dụng Jetpack Compose.
Điều kiện tiên quyết
- Kiến thức cơ bản về phát triển Android
- Kiến thức cơ bản về thông báo
Sản phẩm bạn sẽ tạo ra
Một ứng dụng JetChat mở rộng thực hiện những việc sau:
- Hiện thông báo đại diện cho cuộc trò chuyện trong phần cuộc trò chuyện dành riêng của ngăn thông báo.
- Tệp đối chiếu chia sẻ mục tiêu trong các thông báo này để bạn có thể chia sẻ trong các cuộc trò chuyện của ứng dụng.
- Thực thi các phương pháp hay nhất khi tạo các đối tượng này để tận dụng các trải nghiệm mặc định do hệ thống cung cấp nhằm cải thiện ứng dụng của bạn.
Kiến thức bạn sẽ học được
- Cách hiển thị thông báo liên quan đến cuộc trò chuyện trong phần cuộc trò chuyện đã đặt trước của ngăn thông báo.
- Cách tìm hiểu các trải nghiệm khác nhau do API Nhắn tin và API Người dùng mang lại.
Bạn cần có
- Git
- Android Studio
- Tài khoản GitHub
2. Bắt đầu thiết lập
Điểm bắt đầu dựa trên ứng dụng JetChat. Mã khởi đầu mở rộng ứng dụng JetChat để làm nổi bật hơn các API Nhắn tin và Mọi người.
Tải mã nguồn ban đầu
Để lấy mã khởi đầu cho lớp học lập trình này, hãy làm theo các bước sau:
- Từ dòng lệnh, hãy sao chép kho lưu trữ GitHub sau:
git clone –branch starter-code \ https://github.com/android/people-messaging-codelab.git
- Mở dự án trong Android Studio rồi nhấp vào Chạy ứng dụng. Ngăn Emulator (Trình mô phỏng) sẽ xuất hiện và cho thấy ứng dụng.
Khám phá ứng dụng JetChat mở rộng
- Trong hộp văn bản Message #composers của ứng dụng, hãy nhập tin nhắn rồi nhấn vào Gửi.
- Điều hướng khỏi ứng dụng. Sau vài giây, bạn nhận được thông báo đẩy có nội dung phản hồi của người nào đó trong cuộc trò chuyện.
3. Tạo thông báo về cuộc trò chuyện
Android 11 đã giới thiệu các API cho phép các thông báo liên quan đến trò chuyện xuất hiện trong một phần được chỉ định trong ngăn thông báo, dành riêng cho các cuộc trò chuyện.
Thông báo phải thuộc lớp Notification.MessagingStyle
và tham chiếu đến một lối tắt chia sẻ dài . Trong phần này, bạn tìm hiểu cách đáp ứng các yêu cầu về API này để hiển thị những thông báo đại diện cho cuộc trò chuyện trong phần trò chuyện.
Để tạo thông báo về lớp NotificationCompat.MessagingStyle
, hãy làm theo các bước sau:
- Trong thẻ Project (Dự án) của Android Studio, hãy nhấp vào biểu tượng
app
>java
>com.example.compose.jetchat
>conversation
rồi nhấp đúp vàoConversationFragment
. - Trong tệp
ConversationFragment.kt
, hãy tìm lớpConversationFragment
, sau đó tìm khối mãNotification
của hàmcreateNotification
nơi thông báo được tạo. - Thay thế phương thức
setContentText
bằng phương thứcsetStyle
để đặt kiểu của thông báo thành lớpNotificationCompat.MessagingStyle
. Lớp trợ giúp này sẽ thêm thông báo đã đặt bằng phương thứcsetContextText
kèm bối cảnh bổ sung liên quan đến thông báo, chẳng hạn như thời gian gửi và người gửi thông báo.
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()
}
Chạy ứng dụng
- Chạy ứng dụng.
- Trong hộp văn bản Message #composers của ứng dụng, hãy nhập tin nhắn rồi nhấn vào Gửi.
- Điều hướng khỏi ứng dụng. Bạn lại nhận được thông báo đẩy nhưng thông báo đó có kiểu khác. Thông điệp này có hình đại diện và kiểu riêng biệt. Tuy nhiên, vẫn còn một số việc phải làm trước khi thông báo của bạn xuất hiện ở đúng nơi.
4. Tạo mục tiêu chia sẻ cho các cuộc trò chuyện
Bạn cần tham chiếu đến lối tắt chia sẻ hoặc đích đến được chia sẻ trong thông báo. Đích chia sẻ được xác định trong tệp shortcuts.xml
và là điểm truy cập để xử lý lối tắt được xác định bằng phương thức lập trình. Các lối tắt mà bạn tạo đại diện cho các cuộc trò chuyện trong ứng dụng và cho phép bạn chia sẻ nội dung trong các cuộc trò chuyện của mình.
Xác định mục tiêu chia sẻ
- Trong thẻ Project (Dự án), hãy nhấp chuột phải vào thư mục
res
rồi chọn New (Mới) > Thư mục. - Trong hộp văn bản, hãy nhập
xml
rồi nhấnEnter
(hoặcreturn
trên macOS). - Nhấp chuột phải vào thư mục
xml
rồi chọn File (Tệp). - Trong hộp văn bản, hãy nhập
shortcuts.xml
rồi nhấnEnter
(hoặcreturn
trên macOS). - Trong tệp
shortcuts.xml
, hãy khai báo mục tiêu chia sẻ giúp xử lý việc chia sẻ dữ liệu thuộc loạitext/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>
- Trong thẻ Project (Dự án), hãy nhấp vào biểu tượng
manifests
rồi nhấp đúp vào biểu tượngAndroidManifest.xml
. - Trong tệp
AndroidManifest.xml
, hãy xác định tệpshortcuts.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>
- Trong thành phần
activity
của tệpAndroidManifest.xml
, hãy xác định bộ lọc ý định chứa logic chia sẻ:
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>
...
Xác định lối tắt
Đối với mỗi thông báo, bạn cần liên kết lối tắt có liên quan. Bạn chỉ xác định một lối tắt duy nhất cho mỗi cuộc trò chuyện vì lối tắt duy nhất đại diện cho một người liên hệ mà bạn muốn chia sẻ.
Để tạo lối tắt, hãy làm theo các bước sau:
- Trong thẻ Project (Dự án), hãy nhấp vào
app
>java
>com.example.compose.jetchat
>conversation
>util
rồi nhấp đúp vàoConversationUtil
. - Trong tệp
ConversationUtil.kt
, hãy thêm một hàmgenerateShortcut
:
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()
}
Hàm này chứa các phương thức setPerson
và setLongLived
cần thiết cho cuộc trò chuyện. Người đó là người liên hệ liên kết với lối tắt và việc đặt tồn tại lâu dài thành giá trị true
sẽ đảm bảo rằng lối tắt này được hệ thống lưu vào bộ nhớ đệm và xuất hiện ở nhiều nơi trên giao diện người dùng.
Tham chiếu đến lối tắt trong thông báo
Bạn cần tham chiếu lối tắt chia sẻ trong thông báo. Tuy nhiên, bạn phải tạo lối tắt trước khi đẩy thông báo.
Để thực hiện việc này, hãy làm theo các bước sau:
- Trong tệp
ConversationFragment.kt
, hãy tìm lớpConversationFragment
. - Trước khi gọi biến
notification
, hãy tạo một biếnshortcut
tham chiếu đến lối tắt được tạo từConversationUtil.generateShortcut
. - Trong phương thức
createNotification
của biếnnotification
, hãy thay thếnull
bằng biếnshortcut
làm tham số.
ConversationFragment.kt
private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
val shortcut = ConversationUtil.generateShortcut(context!!, message.author)
val notification = createNotification(notificationId, message, person, shortcut, time)
...
}
}
- Trong phương thức
createNotification
, hãy thêm phương thứcNotificationCompat.Builder#setShortcutInfo
, sau đó truyền biếnshortcut
dưới dạng thông số.
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()
}
Xuất bản lối tắt
- Để xuất bản lối tắt, trong hàm
simulateResponseAsANotification
trước phương thứcnotificationManager.notify
, hãy gọi phương thứcpushDynamicShortcut
:
ConversationFragment.kt
import androidx.core.content.pm.ShortcutManagerCompat
...private fun simulateResponseAsANotification() {
...
if (message.author != "me") {
...
ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
...
}
}
Chạy ứng dụng
- Chạy ứng dụng.
- Trong hộp văn bản Message #composers của ứng dụng, hãy nhập tin nhắn rồi nhấn vào Gửi.
- Điều hướng khỏi ứng dụng. Bạn nhận được thông báo đẩy một lần nữa nhưng thông báo đó được tạo kiểu rõ ràng hơn như một thông báo liên quan đến cuộc trò chuyện. Biểu tượng hình đại diện rõ ràng hơn và có cả biểu tượng ứng dụng. Người gửi, thời gian và văn bản cũng được sắp xếp hợp lý hơn.
5. Không bắt buộc: Bật bong bóng
Bong bóng trò chuyện được giới thiệu trong Android 9, đồng thời được cải tiến và sử dụng lại để sử dụng trong bối cảnh trò chuyện trong Android 11. Bong bóng trò chuyện là lớp phủ hình tròn là hình đại diện cho cuộc trò chuyện của bạn. Chúng xuất hiện trong trình chạy ứng dụng và cho phép bạn dễ dàng trả lời các cuộc trò chuyện trong bong bóng mở rộng. Ngay cả khi được triển khai, bong bóng trò chuyện vẫn là không bắt buộc tuỳ thuộc vào lựa chọn ưu tiên của người dùng.
Để bật bong bóng, hãy làm theo các bước sau:
- Trong tệp
AndroidManifest.xml
, hãy thêm các thuộc tínhallowEmbedded
vàresizeableActivity
, sau đó đặt mỗi thuộc tính thành một giá trịtrue
:
AndroidManifest.xml
<activity
...
android:allowEmbedded="true"
android:resizeableActivity="true"
...
</activity>
- Trong lớp
ConversationUtil
của tệpConversationUtil.kt
, hãy thêm siêu dữ liệu bong bóng:
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()
}
- Trong tệp
ConversationFragment.kt
, hãy tạo và tham chiếu đến siêu dữ liệu bong bóng trên thông báo:
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()
}
Chạy ứng dụng
- Chạy ứng dụng.
- Trong hộp văn bản Message #composers của ứng dụng, hãy nhập tin nhắn rồi nhấn vào Gửi.
- Điều hướng khỏi ứng dụng. Sau vài giây, bạn sẽ nhận được thông báo từ cuộc trò chuyện dưới dạng bong bóng.
- Nhấn vào bong bóng. Cuộc trò chuyện sẽ mở từ bong bóng.
6. Không bắt buộc: Chia sẻ đường liên kết
Bạn đã khai báo các mục tiêu chia sẻ và tham chiếu các mục tiêu này trong thông báo của mình. Việc này cũng cho phép hiển thị người liên hệ của bạn trong Trang chia sẻ nội dung. Đây là thành phần từ dưới lên xuất hiện khi ý định ACTION
được gửi. Mục tiêu chia sẻ xuất hiện ở đầu Trang chia sẻ nội dung và cho phép bạn chia sẻ nội dung đa dạng thức trong cuộc trò chuyện.
Để gọi Trang chia sẻ nội dung, hãy làm theo các bước sau:
- Trên thiết bị, hãy mở Google Chrome rồi chuyển đến một trang web mà bạn chọn, chẳng hạn như developer.android.com.
- Nếu cần, nhấp vào Nhiều đỉnh.
- Nhấp vào Chia sẻ. Trang chia sẻ nội dung sẽ xuất hiện ở cuối màn hình.
- Nếu có thể, hãy nhấp vào JetChat. URL được chia sẻ trong cuộc trò chuyện.
- Nếu bạn không thấy JetChat, hãy nhấp vào Thêm để gọi trang chia sẻ nội dung của hệ thống, sau đó vuốt lên trên Trang chia sẻ nội dung và nhấp vào JetChat. URL được chia sẻ trong cuộc trò chuyện.
Đây là một ví dụ đơn giản. Có nhiều loại nội dung phong phú hơn để chia sẻ. Để biết thêm thông tin, hãy xem phần Truy xuất dữ liệu đơn giản từ các ứng dụng khác.
7. Xin chúc mừng
Xin chúc mừng! Giờ đây, bạn đã biết cách thêm các tính năng liên quan đến trò chuyện vào ứng dụng Android bằng API Nhắn tin và Mọi người. Chúc bạn nhắn tin vui vẻ!