0Pricing
Android Academy · บทเรียน

การแจ้งเตือนแบบพุช

ส่งการแจ้งเตือนแบบพุชผ่าน 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):

  1. แอปลงทะเบียนกับ FCM เมื่อเปิดใช้งานครั้งแรก → ได้รับ โทเค็น ของอุปกรณ์
  2. แอปส่งโทเค็นไปยังเซิร์ฟเวอร์ของคุณ
  3. เมื่อคุณต้องการส่งการแจ้งเตือน เซิร์ฟเวอร์จะส่งข้อความไปยัง FCM
  4. FCM ส่งข้อความไปยังอุปกรณ์

FCM ใช้งานได้ฟรี มีความน่าเชื่อถือ และทำงานได้แม้แอปถูกปิด

การเพิ่ม Firebase ลงในโปรเจกต์

ขั้นตอนการเพิ่ม Firebase:

  1. ไปที่ Firebase Console → เพิ่มโปรเจกต์ → เพิ่มแอป Android
  2. ลงทะเบียนแอปด้วยชื่อแพ็กเกจ
  3. ดาวน์โหลด google-services.json และวางไว้ใน app/
  4. เพิ่มปลั๊กอินและ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Retrofit และ REST APIs
  2. การโหลดรูปภาพด้วย Coil
  3. การจัดการข้อผิดพลาดและประสบการณ์ผู้ใช้
  4. การแจ้งเตือนแบบพุช
  5. WorkManager และงานเบื้องหลัง
  6. การเผยแพร่ไปยัง Play Store
← กลับไปที่ Android Academy