Registration Token ในการแจ้งเตือนแบบ Push: คืออะไร วิธีการรับและอัปเดต

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-21 เวลาอ่าน: 8 นาที

Registration Token คือตัวระบุอุปกรณ์ที่ไม่ซ้ำกันซึ่ง Firebase Cloud Messaging (FCM) ใช้ในการส่งการแจ้งเตือนแบบ Push แต่ละแอปบนแต่ละอุปกรณ์จะได้รับโทเค็นของตัวเอง โดยที่ไม่สามารถส่งการแจ้งเตือนได้หากไม่มีโทเค็นนี้ ตามข้อมูลจาก Firebase, 2025 Registration Token จะถูกสร้างขึ้นโดยอัตโนมัติเมื่อเปิดแอปครั้งแรกและอาจเปลี่ยนแปลงได้ภายใต้เงื่อนไขบางประการ

ประเด็นสำคัญ

  • Registration Token คือสตริงที่ระบุอินสแตนซ์ของแอปบนอุปกรณ์เฉพาะสำหรับ FCM
  • โทเค็นจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อเริ่มใช้งานครั้งแรกหรือหลังจากลบข้อมูลแอป
  • FCM ใช้โทเค็นในการกำหนดเส้นทางการแจ้งเตือนแบบ Push ไปยังอุปกรณ์ที่ถูกต้อง
  • โทเค็นอาจเปลี่ยนแปลงได้ — แอปต้องสมัครรับการอัปเดตผ่าน onNewToken
  • ในการส่งการแจ้งเตือน เซิร์ฟเวอร์ต้องจัดเก็บโทเค็นปัจจุบันของอุปกรณ์ทั้งหมด

Registration Token คืออะไร

Registration Token คือสตริงที่ไม่ซ้ำกันซึ่งมีความยาวสูงสุด 4096 ตัวอักษรที่ Firebase Cloud Messaging กำหนดให้กับแต่ละอินสแตนซ์ของแอป โทเค็นถูกสร้างขึ้นบนพื้นฐานของ ID แอป ID อุปกรณ์ และบัญชี Google บนอุปกรณ์

โครงสร้างและวัตถุประสงค์ของโทเค็น

Registration Token ประกอบด้วยลำดับตัวอักษรแบบสุ่มที่เข้ารหัสในรูปแบบ Base64 FCM ใช้โทเค็นนี้เป็น ที่อยู่สำหรับจัดส่ง — เซิร์ฟเวอร์ส่งการแจ้งเตือนไปยังโทเค็น และ FCM จะกำหนดเส้นทางไปยังอุปกรณ์เฉพาะ หากไม่มีโทเค็น จะไม่สามารถส่งการแจ้งเตือนแบบ Push ไปยังผู้ใช้เฉพาะได้

ความแตกต่างจากตัวระบุอื่นๆ

ไม่ควรสับสนระหว่าง Registration Token กับ Device ID (IMEI) หรือ Advertising ID Device ID คือตัวระบุฮาร์ดแวร์ของอุปกรณ์ ในขณะที่ Advertising ID ใช้เพื่อวัตถุประสงค์ในการโฆษณา Registration Token เชื่อมโยงกับการรวมกันของแอปและอุปกรณ์ และอุปกรณ์หนึ่งเครื่องสามารถมีหลายโทเค็นสำหรับแอปต่างๆ

ตัวระบุวัตถุประสงค์ความสามารถในการเปลี่ยนแปลง
Registration Tokenการส่งการแจ้งเตือนแบบ Push ของ FCMอาจเปลี่ยนแปลงได้
Device ID (IMEI)การระบุฮาร์ดแวร์ถาวร
Advertising IDโฆษณาแบบกำหนดเป้าหมายสามารถรีเซ็ตได้
Instance IDกลไก Firebase รุ่นเก่าเปลี่ยนแปลงเมื่อลบ

เมื่อใดที่โทเค็นถือว่าไม่ถูกต้อง

FCM อาจถือว่า Registration Token ไม่ถูกต้องในหลายสถานการณ์ หากแอปถูกลบออกจากอุปกรณ์ โทเค็นจะถูกเพิกถอนโดยอัตโนมัติ เมื่อกู้คืนข้อมูลจากการสำรองข้อมูลบนอุปกรณ์ใหม่ โทเค็นเก่าจะหยุดทำงาน นอกจากนี้ Firebase จะส่งคืนสถานะ UNREGISTERED เมื่อพยายามส่งการแจ้งเตือนไปยังโทเค็นที่ล้าสมัย

FCM กำหนด Registration Token อย่างไร

Firebase Cloud Messaging จะสร้าง Registration Token เมื่อแอปเปิดครั้งแรกและเรียกใช้เมธอด getToken() กระบวนการนี้รวมถึงการตรวจสอบข้อมูลรับรอง Google Play Services และการลงทะเบียนแอปในโครงสร้างพื้นฐานของ Firebase

กระบวนการลงทะเบียนอุปกรณ์

เมื่ออุปกรณ์เรียกใช้แอปที่มี FCM SDK ในตัวเป็นครั้งแรก จะเกิดสิ่งต่อไปนี้ Firebase SDK ตรวจสอบการมีอยู่ของ Google Play Services บนอุปกรณ์ จากนั้น SDK จะส่งคำขอไปยังเซิร์ฟเวอร์ Firebase โดยส่ง ID แอปและข้อมูลอุปกรณ์ เซิร์ฟเวอร์ Firebase สร้างโทเค็นใหม่และส่งคืนให้กับแอป

กลไกภายในของ FCM

FCM ใช้สถาปัตยกรรมที่อิงตามการเชื่อมต่อระยะยาว หลังจากได้รับ Registration Token อุปกรณ์จะสร้างการเชื่อมต่อถาวรกับเซิร์ฟเวอร์ Firebase ผ่าน โปรโตคอล STOMP บน Android หรือ ช่องทาง APNs บน iOS เมื่อเซิร์ฟเวอร์ส่งการแจ้งเตือนไปยังโทเค็น FCM จะค้นหาอุปกรณ์ด้วยโทเค็นและส่งเพย์โหลด

เงื่อนไขการสร้างโทเค็นใหม่

Registration Token อาจถูกสร้างใหม่โดย FCM ในกรณีต่อไปนี้ เมื่อกู้คืนแอปจากการสำรองข้อมูลบนอุปกรณ์ใหม่ เมื่อลบและติดตั้งแอปใหม่ เมื่อล้างข้อมูลแอปผ่านการตั้งค่าระบบ เมื่อเข้าสู่ระบบด้วย บัญชี Google อื่นบนอุปกรณ์ Firebase แนะนำให้จัดการ onNewToken callback เสมอเพื่อติดตามการเปลี่ยนแปลง

การรับ Registration Token บน Android

บน Android การรับ Registration Token ทำได้ผ่าน Firebase Messaging SDK กระบวนการจะแตกต่างกันไปตามเวอร์ชันของ SDK — เวอร์ชันใหม่ใช้ FirebaseInstallations API แทน FirebaseInstanceId ที่เลิกใช้งานแล้ว

วิธีการสมัยใหม่ผ่าน FirebaseInstallations

ตั้งแต่ Firebase SDK เวอร์ชัน 21.0.0 เป็นต้นไป เมธอด getToken() จะถูกเรียกผ่าน FirebaseMessaging วิธีการนี้จะจัดการวงจรชีวิตของโทเค็นโดยอัตโนมัติและสมัครรับการอัปเดต

kotlin
class MyFirebaseMessagingService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        sendRegistrationToServer(token)
    }

    private fun sendRegistrationToServer(token: String) {
        // ส่งโทเค็นไปยังเซิร์ฟเวอร์
        Log.d("FCM", "New token: $token")
    }

    init {
        FirebaseMessaging.getInstance()
            .getToken()
            .addOnCompleteListener { task ->
                if (!task.isSuccessful) {
                    Log.w("FCM", "การรับโทเค็น FCM ล้มเหลว")
                    return@addOnCompleteListener
                }
                val token = task.result
                sendRegistrationToServer(token)
            }
    }
}

การจัดการโทเค็นใน Activity หรือ ViewModel

ในบางสถานการณ์ โทเค็นจำเป็นต้องใช้ไม่ใช่ในบริการ แต่โดยตรงใน Activity หรือ ViewModel สำหรับสิ่งนี้ สามารถเรียก getToken() ได้ในจุดที่เหมาะสมของวงจรชีวิตของแอป สิ่งสำคัญคือไม่ควรเรียกเมธอดนี้จากเธรดหลักโดยไม่จัดการกับความไม่ประสานเวลา

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        getFCMToken()
    }

    private fun getFCMToken() {
        FirebaseMessaging.getInstance().getToken()
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val token = task.result
                    Log.d("FCM", "Token: $token")
                }
            }
    }
}

วิธีการ FirebaseInstanceId แบบเก่า

ในเวอร์ชันเก่าของ Firebase SDK (ก่อนเวอร์ชัน 20.x) โทเค็นถูกได้รับผ่าน FirebaseInstanceId.getInstance().getToken() เมธอดนี้ถูกทำเครื่องหมายว่าเลิกใช้งานแล้วและไม่แนะนำให้ใช้ในโปรเจกต์ใหม่ นักพัฒนาที่ดูแลโค้ดรุ่นเก่าควรย้ายไปใช้ FirebaseInstallations API

การรับ Registration Token บน iOS

บน iOS กระบวนการรับ Registration Token แตกต่างกันในเชิงสถาปัตยกรรม — FCM ทำงานผ่าน Apple Push Notification service (APNs) Firebase SDK รับโทเค็นอุปกรณ์ที่ไม่ซ้ำกันจาก APNs แปลงเป็นรูปแบบ FCM และส่งต่อไปยังแอป

การตั้งค่า APNs และการรับโทเค็น

ในการใช้ FCM บน iOS จำเป็นต้องกำหนดค่าใบรับรองหรือคีย์ APNs ในคอนโซล Firebase แอปต้องขออนุญาตการแจ้งเตือนผ่าน UNUserNotificationCenter หลังจากได้รับโทเค็น APNs แล้ว Firebase SDK จะสร้าง Registration Token โดยอัตโนมัติ

swift
import FirebaseMessaging
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        application: UIApplication,
        didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        FirebaseApp.configure()
        Messaging.messaging().delegate = self
        requestNotificationAuthorization()
        return true
    }

    private func requestNotificationAuthorization() {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge])
    }
}

extension AppDelegate: MessagingDelegate {
    func messaging(
        messaging: Messaging,
        didReceiveRegistrationToken fcmToken: String?
    ) {
        Log.d("FCM", "Token: \(fcmToken ?? "")")
        sendTokenToServer(token: fcmToken)
    }
}

ความแตกต่างระหว่างโทเค็น iOS และ Android

Registration Token บน iOS มีขนาดเล็กกว่าเมื่อเทียบกับโทเค็น Android เนื่องจากอิงตาม โทเค็นอุปกรณ์ APNs Firebase SDK จะอัปเดตโทเค็น FCM โดยอัตโนมัติเมื่อโทเค็น APNs เปลี่ยนแปลง ซึ่งเกิดขึ้นเมื่อกู้คืนอุปกรณ์จากการสำรองข้อมูลหรือติดตั้งแอปใหม่

การอัปเดตและจัดการ Registration Token

การจัดการวงจรชีวิต ของ Registration Token เป็นงานที่สำคัญอย่างยิ่งสำหรับการส่งการแจ้งเตือนแบบ Push ที่เชื่อถือได้ หากเซิร์ฟเวอร์จัดเก็บโทเค็นที่ล้าสมัย การแจ้งเตือนจะไม่ถูกส่ง และ Firebase จะส่งคืนข้อผิดพลาด UNREGISTERED

การติดตามการเปลี่ยนแปลงของโทเค็น

Firebase SDK มีกลไกสองอย่างสำหรับติดตามการเปลี่ยนแปลงของโทเค็น บน Android จะใช้ callback onNewToken ใน FirebaseMessagingService บน iOS จะใช้ delegate messaging:didReceiveRegistrationToken ทั้งสองจะถูกเรียกทุกครั้งที่โทเค็นถูกอัปเดต

kotlin
// บันทึกโทเค็นใน SharedPreferences และส่งไปยังเซิร์ฟเวอร์
class TokenManager(private val context: Context) {

    companion object {
        private const val PREFS_TOKEN_KEY = "fcm_registration_token"
    }

    fun saveToken(token: String) {
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(context)
        prefs.edit().putString(PREFS_TOKEN_KEY, token).apply()
    }

    fun getSavedToken(): String? {
        val prefs = PreferenceManager
            .getDefaultSharedPreferences(context)
        return prefs.getString(PREFS_TOKEN_KEY, null)
    }
}

กลยุทธ์การจัดเก็บโทเค็นบนเซิร์ฟเวอร์

เซิร์ฟเวอร์ต้องจัดเก็บ Registration Token ร่วมกับ ตัวระบุผู้ใช้ เมื่อโทเค็นถูกอัปเดต ไคลเอ็นต์จะส่งโทเค็นใหม่ไปยังเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะแทนที่โทเค็นเก่า ขอแนะนำให้เก็บประวัติโทเค็นไว้: หากการแจ้งเตือนไม่ถูกส่งไปยังโทเค็นใหม่ สามารถลองใช้โทเค็นเก่าได้

การจัดการข้อผิดพลาดเมื่อทำงานกับโทเค็น

Firebase อาจส่งคืนข้อผิดพลาดในการรับโทเค็นในหลายกรณี การไม่มี Google Play Services บนอุปกรณ์ — จะไม่ได้รับโทเค็น การเกินโควต้าคำขอไปยัง FCM — จำเป็นต้องใช้ การหน่วงเวลาแบบเอกซ์โปเนนเชียล เมื่อลองใหม่ การหมดอายุของโทเค็น — SDK จะขอใหม่โดยอัตโนมัติ

สถานการณ์ผลลัพธ์การดำเนินการของนักพัฒนา
การลบแอปโทเค็นถูกเพิกถอนลบโทเค็นออกจากฐานข้อมูล
การกู้คืนจากสำรองโทเค็นใหม่อัปเดตในฐานข้อมูล
การรีเซ็ต Google Play Servicesสร้างโทเค็นใหม่จัดการ onNewToken
โทเค็นหมดอายุอัปเดตอัตโนมัติสมัครรับการอัปเดต

คำถามที่พบบ่อย

จะทำอย่างไรหากไม่ได้รับ Registration Token?

ตรวจสอบการมีอยู่ของ Google Play Services บนอุปกรณ์ ความถูกต้องของไฟล์ google-services.json และเวอร์ชันของ Firebase SDK ตรวจสอบให้แน่ใจว่าแอปมีสิทธิ์เข้าถึงอินเทอร์เน็ต

Registration Token เปลี่ยนแปลงบ่อยแค่ไหน?

โทเค็นอาจเปลี่ยนแปลงเมื่อถอนการติดตั้งและติดตั้งแอปใหม่ ล้างข้อมูล กู้คืนจากการสำรองข้อมูล หรือเข้าสู่ระบบด้วย บัญชี Google อื่น ไม่มีช่วงเวลาที่แน่นอน

อุปกรณ์หนึ่งเครื่องสามารถมี Registration Token หลายอันได้หรือไม่?

ได้ แต่ละแอปบนอุปกรณ์จะได้รับโทเค็น FCM ของตัวเอง หากอุปกรณ์มีสามแอปที่ใช้ Firebase แต่ละแอปจะมี Registration Token ที่ไม่ซ้ำกัน ของตัวเอง

จะตรวจสอบได้อย่างไรว่า Registration Token ยังใช้ได้อยู่?

ส่งการแจ้งเตือนทดสอบผ่านคอนโซล Firebase หรือ FCM HTTP API หากโทเค็นไม่ถูกต้อง API จะส่งคืนข้อผิดพลาด UNREGISTERED หรือ NOT_FOUND

การจัดเก็บ Registration Token บนเซิร์ฟเวอร์ปลอดภัยหรือไม่?

Registration Token ไม่ใช่คีย์ลับ แต่การรั่วไหลของมันทำให้สามารถส่งการแจ้งเตือนไปยังอุปกรณ์ของผู้ใช้ได้ จัดเก็บโทเค็นใน ฐานข้อมูลที่ปลอดภัย และใช้ HTTPS สำหรับการส่งข้อมูล

สรุป

  • Registration Token เป็นองค์ประกอบที่จำเป็นสำหรับการส่งการแจ้งเตือนแบบ Push ผ่าน Firebase Cloud Messaging
  • โทเค็นจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อเปิดแอปที่มี FCM SDK ครั้งแรก
  • บน Android โทเค็นจะได้รับผ่าน FirebaseMessaging.getInstance().getToken()
  • บน iOS โทเค็นจะอิงตามโทเค็นอุปกรณ์ APNs และส่งผ่าน delegate MessagingDelegate
  • โทเค็นอาจเปลี่ยนแปลงได้ — แอปต้องจัดการ callback onNewToken
  • เซิร์ฟเวอร์ต้องจัดเก็บโทเค็นปัจจุบันและลบโทเค็นที่ล้าสมัยเมื่อเกิดข้อผิดพลาด UNREGISTERED
  • สำหรับการส่งที่เชื่อถือได้ ใช้การติดตามการเปลี่ยนแปลงของโทเค็นและกลไกการลองใหม่เมื่อเกิดความล้มเหลว

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม