การแจ้งเตือนแบบพุช
ส่งการแจ้งเตือนแบบพุชผ่าน Firebase Cloud Messaging ตั้งค่า FCM สร้างช่องการแจ้งเตือน สร้างการแจ้งเตือนพร้อมการดำเนินการ และจัดการการส่งขณะทำงานอยู่เบื้องหน้าเทียบกับเบื้องหลัง
การแจ้งเตือนแบบพุช เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน
การแจ้งเตือนแบบพุชคืออะไร
การแจ้งเตือนแบบพุช ช่วยให้เซิร์ฟเวอร์ส่งข้อความถึงผู้ใช้ได้ แม้แอปจะไม่ได้อยู่เบื้องหน้า การใช้งานที่พบได้บ่อย:
- การแจ้งเตือนข้อความใหม่
- การอัปเดตสถานะคำสั่งซื้อ
- ข่าวด่วน
- การแจ้งเตือนและโปรโมชัน
บน Android นั้น Firebase Cloud Messaging (FCM) เป็นบริการมาตรฐานสำหรับส่งการแจ้งเตือนแบบพุช
ภาพรวม FCM
ลำดับการทำงานของ Firebase Cloud Messaging (FCM):
- แอปลงทะเบียนกับ FCM เมื่อเปิดใช้งานครั้งแรก → ได้รับ โทเค็น ของอุปกรณ์
- แอปส่งโทเค็นไปยังเซิร์ฟเวอร์ของคุณ
- เมื่อคุณต้องการส่งการแจ้งเตือน เซิร์ฟเวอร์จะส่งข้อความไปยัง FCM
- FCM ส่งข้อความไปยังอุปกรณ์
FCM ใช้งานได้ฟรี มีความน่าเชื่อถือ และทำงานได้แม้แอปถูกปิด
การเพิ่ม Firebase ลงในโปรเจกต์
ขั้นตอนการเพิ่ม Firebase:
- ไปที่ Firebase Console → เพิ่มโปรเจกต์ → เพิ่มแอป Android
- ลงทะเบียนแอปด้วยชื่อแพ็กเกจ
- ดาวน์โหลด
google-services.jsonและวางไว้ในapp/ - เพิ่มปลั๊กอินและ dependency
// project/build.gradle:
buildscript {
dependencies { classpath 'com.google.gms:google-services:4.4.1' }
}
// app/build.gradle:
plugins { id 'com.google.gms.google-services' }
dependencies {
implementation platform('com.google.firebase:firebase-bom:32.7.4')
implementation 'com.google.firebase:firebase-messaging-ktx'
}สิทธิ์ FCM (Android 13 ขึ้นไป)
ตั้งแต่ Android 13 (API 33) เป็นต้นไป คุณต้องขอสิทธิ์ POST_NOTIFICATIONS ขณะทำงาน เช่นเดียวกับสิทธิ์ที่มีความเสี่ยง:
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
// In Activity (Android 13+):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestPermissionLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS)
}FirebaseMessagingService
สร้างบริการที่จัดการข้อความ FCM ที่เข้ามาและการรีเฟรชโทเค็น:
class MyFirebaseService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
// Send token to your backend to enable push delivery
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
val title = message.notification?.title ?: "New Message"
val body = message.notification?.body ?: ""
showNotification(title, body)
}
}ลงทะเบียนบริการใน Manifest
ประกาศบริการใน AndroidManifest.xml:
<service
android:name=".MyFirebaseService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>ช่องการแจ้งเตือน (Android 8 ขึ้นไป)
ตั้งแต่ Android 8 (Oreo) เป็นต้นไป การแจ้งเตือนต้องกำหนดให้กับ ช่อง ผู้ใช้สามารถควบคุมเสียง การสั่น และระดับความสำคัญแยกกันในแต่ละช่องได้:
fun createNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
"messages_channel", // channel ID
"Messages", // user-visible name
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Incoming message notifications"
enableVibration(true)
}
val manager = context.getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
}การสร้างและแสดงการแจ้งเตือน
ใช้ NotificationCompat.Builder เพื่อให้รองรับ Android หลายเวอร์ชัน:
fun showNotification(context: Context, title: String, body: String) {
val intent = Intent(context, MainActivity::class.java)
val pendingIntent = PendingIntent.getActivity(
context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val notification = NotificationCompat.Builder(context, "messages_channel")
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(body)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true) // dismiss on tap
.setContentIntent(pendingIntent) // open app on tap
.build()
NotificationManagerCompat.from(context)
.notify(System.currentTimeMillis().toInt(), notification)
}การแจ้งเตือนพร้อมการทำงาน
เพิ่มปุ่มการทำงานในการแจ้งเตือน เพื่อให้ผู้ใช้ดำเนินการได้โดยไม่ต้องเปิดแอป:
val replyIntent = Intent(context, ReplyReceiver::class.java)
val replyPending = PendingIntent.getBroadcast(
context, 1, replyIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val notification = NotificationCompat.Builder(context, "messages_channel")
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("New message from Alice")
.setContentText("Hey, are you coming?")
.addAction(R.drawable.ic_reply, "Reply", replyPending)
.addAction(R.drawable.ic_dismiss, "Dismiss", null)
.build()การจัดการเบื้องหน้าเทียบกับเบื้องหลัง
FCM ทำงานแตกต่างกันตามสถานะของแอป:
- แอปอยู่เบื้องหน้า — มีการเรียก
onMessageReceived()และคุณต้องสร้างและแสดงการแจ้งเตือนด้วยตนเอง - แอปอยู่เบื้องหลังหรือถูกปิด — FCM จะแสดงการแจ้งเตือนจากข้อมูล
notificationโดยอัตโนมัติ และจะไม่มีการเรียกonMessageReceived
ใส่ข้อมูลเพิ่มเติมไว้ในข้อมูล data แทน notification เพื่อให้ได้รับข้อมูลนั้นใน onMessageReceived เสมอ
การรับโทเค็น FCM
เรียกดูโทเค็น FCM ปัจจุบันเพื่อส่งไปยังเซิร์ฟเวอร์ของคุณ:
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Fetching token failed", task.exception)
return@addOnCompleteListener
}
val token = task.result
Log.d("FCM", "Token: $token")
// Send token to your server
sendTokenToServer(token)
}ตรวจสอบความเข้าใจ
จะเกิดอะไรขึ้นเมื่อแอปอยู่เบื้องหลังและ FCM ส่งข้อความที่มีข้อมูล 'notification'
สรุป: การแจ้งเตือนแบบพุช
การแจ้งเตือนแบบพุชด้วย FCM บน Android:
- เพิ่ม Firebase,
google-services.jsonและfirebase-messaging-ktx - ขอสิทธิ์
POST_NOTIFICATIONSบน Android 13 ขึ้นไป - สร้าง
FirebaseMessagingService→onNewToken+onMessageReceived - สร้าง
NotificationChannelสำหรับ Android 8 ขึ้นไป - สร้างการแจ้งเตือนด้วย
NotificationCompat.Builder - ใช้ข้อมูล data เพื่อให้ได้รับข้อมูลใน
onMessageReceivedเสมอ
ถัดไป: ตั้งเวลางานเบื้องหลังด้วย WorkManager
คำถามที่พบบ่อย
บทเรียน “การแจ้งเตือนแบบพุช” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแจ้งเตือนแบบพุช” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแจ้งเตือนแบบพุช”
ส่งการแจ้งเตือนแบบพุชผ่าน Firebase Cloud Messaging ตั้งค่า FCM สร้างช่องการแจ้งเตือน สร้างการแจ้งเตือนพร้อมการดำเนินการ และจัดการการส่งขณะทำงานอยู่เบื้องหน้าเทียบกับเบื้องหลัง คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 6 บทเรียน
บทเรียน “การแจ้งเตือนแบบพุช” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Retrofit และ REST APIs
- การโหลดรูปภาพด้วย Coil
- การจัดการข้อผิดพลาดและประสบการณ์ผู้ใช้
- การแจ้งเตือนแบบพุช
- WorkManager และงานเบื้องหลัง
- การเผยแพร่ไปยัง Play Store