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

การพุชด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การตั้งค่า Firebase
  2. การยืนยันตัวตนด้วย Firebase
  3. พื้นฐาน Cloud Firestore
  4. การพุชด้วย Cloud Messaging
← กลับไปที่ Android Academy