การพุชด้วย Cloud Messaging
ส่งและรับการแจ้งเตือน FCM
การพุชด้วย Cloud Messaging เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
Cloud Messaging คืออะไร
Firebase Cloud Messaging (FCM) ส่ง การแจ้งเตือนแบบพุช และข้อความข้อมูลไปยังแอปของคุณ — แม้ในขณะที่แอปปิดอยู่
ลำดับการทำงานมีดังนี้:
- การติดตั้งแอปแต่ละครั้งจะได้รับ โทเค็นการลงทะเบียน ที่ไม่ซ้ำกัน
- เซิร์ฟเวอร์ของคุณ (หรือคอนโซล Firebase) ส่งข้อความไปยังโทเค็นนั้น หรือส่งไปยัง หัวข้อ
- FCM นำส่งข้อความไปยังอุปกรณ์ ซึ่งจะแสดงหรือจัดการข้อความนั้น
เพิ่มการพึ่งพาสำหรับ Messaging
FCM อยู่ในไลบรารี firebase-messaging โดยเวอร์ชันจะถูกกำหนดผ่าน BoM ที่คุณตั้งค่าไว้ก่อนหน้านี้
เมื่อมี BoM แล้ว ก็ไม่จำเป็นต้องระบุหมายเลขเวอร์ชัน
// app/build.gradle.kts
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-messaging")
}สิทธิ์การแจ้งเตือน
บน Android 13 (API 33) ขึ้นไป การส่งการแจ้งเตือนจำเป็นต้องใช้สิทธิ์ขณะรันไทม์ POST_NOTIFICATIONS
ประกาศสิทธิ์นี้ในไฟล์ manifest แล้วขอสิทธิ์ขณะรันไทม์ หากไม่ได้รับอนุญาต การแจ้งเตือนของคุณจะถูกทิ้งโดยไม่มีการแจ้งเตือน
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />ขอสิทธิ์
ใช้ Activity Result API เพื่อขอ POST_NOTIFICATIONS ขณะรันไทม์ ให้ขอเฉพาะบน API 33 ขึ้นไป ส่วนเวอร์ชันเก่าจะให้สิทธิ์โดยอัตโนมัติ
import android.Manifest
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts
val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted ->
println(if (granted) "Notifications allowed" else "Notifications denied")
}
fun askNotificationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestPermission.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}โทเค็นการลงทะเบียน
การติดตั้งแต่ละครั้งมี โทเค็น FCM ที่ไม่ซ้ำกัน ซึ่งใช้ระบุการติดตั้งนั้นเป็นเป้าหมาย รับโทเค็นนี้ด้วย Firebase.messaging.token
ส่งโทเค็นนี้ไปยังแบ็กเอนด์ เพื่อให้ระบบส่งข้อความไปยังอุปกรณ์นั้นโดยเฉพาะได้ โทเค็นอาจเปลี่ยนแปลงได้ ดังนั้นให้ถือว่าโทเค็นล่าสุดเป็นโทเค็นที่ถูกต้องเสมอ
import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await
suspend fun currentToken(): String {
return Firebase.messaging.token.await()
}บริการ Messaging
หากต้องการรับข้อความ ให้สืบทอดจาก FirebaseMessagingService แทนที่ onMessageReceived เพื่อจัดการข้อมูลที่เข้ามา และแทนที่ onNewToken เพื่อโต้ตอบเมื่อโทเค็นเปลี่ยน
ลงทะเบียนบริการนี้ในไฟล์ manifest พร้อมตัวกรองอินเทนต์ของ FCM
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class MyFcmService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
// Upload the fresh token to your backend
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
val title = message.notification?.title ?: "New message"
val body = message.notification?.body ?: ""
showNotification(title, body)
}
private fun sendTokenToServer(token: String) { /* ... */ }
private fun showNotification(title: String, body: String) { /* ... */ }
}ลงทะเบียนบริการ
ประกาศบริการของคุณในไฟล์ manifest เพื่อให้ Android นำส่งข้อความไปยังบริการนั้น ตัวกรองอินเทนต์ MESSAGING_EVENT เป็นสิ่งจำเป็น
<!-- AndroidManifest.xml inside <application> -->
<service
android:name=".MyFcmService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>ข้อความการแจ้งเตือนกับข้อความข้อมูล
ข้อความ FCM มีสองรูปแบบ:
- ข้อความการแจ้งเตือน — FCM จะแสดงข้อความในถาดการแจ้งเตือนโดยอัตโนมัติเมื่อแอปทำงานอยู่เบื้องหลัง ส่วน
onMessageReceivedจะถูกเรียกเฉพาะเมื่อแอปอยู่เบื้องหน้า - ข้อความข้อมูล — จะถูกส่งไปยัง
onMessageReceivedเสมอในรูปแบบแผนที่คีย์/ค่า ทำให้คุณควบคุมการจัดการได้
อ่านฟิลด์ที่กำหนดเองจาก message.data
import com.google.firebase.messaging.RemoteMessage
fun handle(message: RemoteMessage) {
val type = message.data["type"] // your custom field
val itemId = message.data["itemId"]
when (type) {
"chat" -> openChat(itemId)
"promo" -> openPromo(itemId)
}
}
fun openChat(id: String?) {}
fun openPromo(id: String?) {}สร้างช่องการแจ้งเตือน
ตั้งแต่ Android 8 เป็นต้นมา การแจ้งเตือนทุกครั้งต้องมี ช่อง ให้สร้างช่องนี้ครั้งเดียวตอนเริ่มต้นแอป ระบบจะใช้ช่องเพื่อควบคุมเสียง ระดับความสำคัญ และการตั้งค่าเฉพาะช่องของผู้ใช้
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
fun createChannel(context: Context) {
val channel = NotificationChannel(
"messages",
"Messages",
NotificationManager.IMPORTANCE_HIGH
)
val manager = context.getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}แสดงการแจ้งเตือน
สร้างการแจ้งเตือนด้วย NotificationCompat.Builder โดยผูกกับ ID ของช่อง แล้วส่งการแจ้งเตือนด้วย NotificationManagerCompat
โปรดจำไว้ว่า บน API 33 ขึ้นไป การแจ้งเตือนจะแสดงก็ต่อเมื่อผู้ใช้อนุญาต POST_NOTIFICATIONS
import android.content.Context
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
fun showNotification(context: Context, title: String, body: String) {
val notification = NotificationCompat.Builder(context, "messages")
.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.build()
NotificationManagerCompat.from(context).notify(1, notification)
}การสมัครรับหัวข้อ
แทนที่จะติดตามโทเค็นแต่ละรายการ คุณสามารถส่งข้อความไปยัง หัวข้อได้ ไคลเอ็นต์จะสมัครรับชื่อหัวข้อ และเซิร์ฟเวอร์ของคุณจะส่งข้อความเดียวให้ทุกคนที่สมัครรับหัวข้อนั้น
เหมาะสำหรับสิ่งต่าง ๆ เช่นประกาศ news, sports หรือ all-users
import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await
suspend fun subscribeToNews() {
Firebase.messaging.subscribeToTopic("news").await()
}
suspend fun unsubscribeFromNews() {
Firebase.messaging.unsubscribeFromTopic("news").await()
}ตรวจสอบความเข้าใจ
แอปของคุณทำงานอยู่เบื้องหลังและได้รับข้อความ การแจ้งเตือน ล้วนจาก FCM จะเกิดอะไรขึ้น
สรุป: Cloud Messaging
ตอนนี้คุณสามารถติดต่อผู้ใช้ด้วยการแจ้งเตือนแบบพุชได้แล้ว:
- เพิ่ม
firebase-messagingและขอ POST_NOTIFICATIONS บน API 33 ขึ้นไป - การติดตั้งแต่ละครั้งมี โทเค็น FCM ให้อัปโหลดโทเค็นนี้ไปยังเซิร์ฟเวอร์ของคุณ
- สืบทอดจาก
FirebaseMessagingServiceและแทนที่onMessageReceived/onNewToken - ทำความเข้าใจความแตกต่างระหว่างข้อความ การแจ้งเตือน กับข้อความ ข้อมูล
- สร้าง ช่องการแจ้งเตือน สร้างการแจ้งเตือนด้วย
NotificationCompatหรือส่งข้อความผ่าน หัวข้อ
นี่เป็นการเสร็จสิ้นองค์ประกอบทั้งสามของ Firebase ได้แก่ Auth, Firestore และ Messaging ซึ่งรวมกันเป็นแบ็กเอนด์ที่สมบูรณ์สำหรับแอป Android ของคุณ
คำถามที่พบบ่อย
บทเรียน “การพุชด้วย Cloud Messaging” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การพุชด้วย Cloud Messaging” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การพุชด้วย Cloud Messaging”
ส่งและรับการแจ้งเตือน FCM คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การพุชด้วย Cloud Messaging” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า Firebase
- การยืนยันตัวตนด้วย Firebase
- พื้นฐาน Cloud Firestore
- การพุชด้วย Cloud Messaging