ตั้งค่าแอปไคลเอ็นต์ Firebase Cloud Messaging ใน Flutter

ทําตามขั้นตอนต่อไปนี้เพื่อตั้งค่าไคลเอ็นต์ FCM ใน Flutter

การตั้งค่าและข้อกำหนดเฉพาะแพลตฟอร์ม

ขั้นตอนที่จําเป็นบางขั้นตอนจะขึ้นอยู่กับแพลตฟอร์มที่คุณกําหนดเป้าหมาย

iOS ขึ้นไป

เปิดใช้ความสามารถของแอปใน Xcode

คุณต้องเปิดใช้การแจ้งเตือนแบบ Push และโหมดเบื้องหลังในโปรเจ็กต์ Xcode ก่อน แอปพลิเคชันจึงจะเริ่มรับข้อความได้

  1. เปิดพื้นที่ทํางานโปรเจ็กต์ Xcode (ios/Runner.xcworkspace)
  2. เปิดใช้ข้อความ Push
  3. เปิดใช้การดึงข้อมูลในเบื้องหลังและการแจ้งเตือนจากระยะไกล โหมดการดำเนินการเมื่ออยู่เบื้องหลัง

อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs

อัปโหลดใบรับรอง APNs ไปยัง Firebase ก่อนใช้ FCM หากยังไม่มีใบรับรอง APNs ให้สร้างใบรับรองในศูนย์สมาชิกนักพัฒนาแอปของ Apple

  1. ในโปรเจ็กต์ในคอนโซล Firebase ให้เลือกไอคอนรูปเฟือง เลือกการตั้งค่าโปรเจ็กต์ แล้วเลือกแท็บการรับส่งข้อความระบบคลาวด์
  2. เลือกปุ่มอัปโหลดใบรับรองสำหรับใบรับรองการพัฒนา ใบรับรองเวอร์ชันที่ใช้งานจริง หรือทั้ง 2 รายการ โดยต้องระบุอย่างน้อย 1 รายการ
  3. เลือกไฟล์ .p12 สำหรับใบรับรองแต่ละรายการ แล้วป้อนรหัสผ่าน (หากมี) ตรวจสอบว่ารหัสกลุ่มของใบรับรองนี้ตรงกับรหัสกลุ่มของแอป เลือกบันทึก

การแลกเปลี่ยนเมธอด

หากต้องการใช้ปลั๊กอิน FCM Flutter ในอุปกรณ์ Apple คุณต้องไม่ปิดใช้การแทนที่เมธอด คุณต้องใช้การสลับที่ หากไม่ใช้ ฟีเจอร์หลักของ Firebase เช่น การจัดการโทเค็น FCM จะทํางานไม่ถูกต้อง

Android

บริการ Google Play

ไคลเอ็นต์ FCM ต้องใช้อุปกรณ์ที่ใช้ Android 4.4 ขึ้นไปซึ่งติดตั้งบริการ Google Play ด้วย หรือโปรแกรมจำลองที่ใช้ Android 4.4 ที่มี Google APIs โปรดทราบว่าคุณไม่ได้จํากัดให้ต้องเผยแพร่แอป Android ผ่าน Google Play Store เท่านั้น

แอปที่อาศัย Play Services SDK ควรตรวจสอบอุปกรณ์เพื่อหา APK บริการ Google Play ที่เข้ากันได้เสมอก่อนที่จะเข้าถึงฟีเจอร์บริการ Google Play เราขอแนะนำให้ทำใน 2 ตําแหน่ง ได้แก่ ในเมธอด onCreate() ของกิจกรรมหลัก และในเมธอด onResume() ของกิจกรรมหลัก การตรวจสอบใน onCreate() ช่วยให้มั่นใจได้ว่าแอปจะไม่สามารถใช้ได้หากการตรวจสอบไม่สำเร็จ การตรวจสอบช่วยให้มั่นใจได้ว่าระบบจะยังคงตรวจสอบอยู่หากผู้ใช้กลับมาที่แอปที่ทำงานอยู่ผ่านวิธีอื่น เช่น ผ่านปุ่มย้อนกลับonResume()

หากอุปกรณ์ไม่มีบริการ Google Play เวอร์ชันที่เข้ากันได้ แอปของคุณจะเรียกใช้ GoogleApiAvailability.makeGooglePlayServicesAvailable() เพื่ออนุญาตให้ผู้ใช้ดาวน์โหลดบริการ Google Play จาก Play Store ได้

เว็บ

กำหนดค่าข้อมูลเข้าสู่ระบบเว็บด้วย FCM

อินเทอร์เฟซเว็บของ FCM ใช้ข้อมูลเข้าสู่ระบบเว็บที่เรียกว่าคีย์ "Voluntary Application Server Identification" หรือ "VAPID" เพื่ออนุญาตให้ส่งคําขอไปยังบริการ Push บนเว็บที่รองรับ หากต้องการสมัครรับการแจ้งเตือนแบบพุช คุณต้องเชื่อมโยงคู่คีย์กับโปรเจ็กต์ Firebase คุณสามารถสร้างคู่คีย์ใหม่หรือนําเข้าคู่คีย์ที่มีอยู่ผ่านคอนโซล Firebase ก็ได้

สร้างคู่คีย์ใหม่
  1. เปิดแท็บ Cloud Messaging ของแผงการตั้งค่าคอนโซล Firebase แล้วเลื่อนไปที่ส่วนการกำหนดค่าเว็บ

  2. ในแท็บใบรับรองพุชจากเว็บ ให้คลิกสร้างคู่คีย์ คอนโซลจะแสดงการแจ้งเตือนว่าสร้างคู่คีย์แล้ว และแสดงสตริงคีย์สาธารณะและวันที่เพิ่ม

นำเข้าคู่คีย์ที่มีอยู่

หากมีคู่คีย์ที่ใช้กับเว็บแอปอยู่แล้ว คุณสามารถนําเข้าคู่คีย์ดังกล่าวไปยัง FCM เพื่อให้เข้าถึงอินสแตนซ์เว็บแอปที่มีอยู่ผ่าน FCM API ได้ หากต้องการนําเข้าคีย์ คุณต้องมีสิทธิ์เข้าถึงโปรเจ็กต์ Firebase ในระดับเจ้าของ นําเข้าคีย์สาธารณะและส่วนตัวที่มีอยู่ในรูปแบบที่เข้ารหัส Base64 URL-safe โดยทำดังนี้

  1. เปิดแท็บ Cloud Messaging ของแผงการตั้งค่าคอนโซล Firebase แล้วเลื่อนไปที่ส่วนการกำหนดค่าเว็บ

  2. ในแท็บใบรับรอง Web Push ให้ค้นหาและเลือกข้อความลิงก์ "นําเข้าคู่คีย์ที่มีอยู่"

  3. ในกล่องโต้ตอบนําเข้าคู่คีย์ ให้ระบุคีย์สาธารณะและคีย์ส่วนตัวในช่องที่เกี่ยวข้อง แล้วคลิกนําเข้า คอนโซลจะแสดงสตริงคีย์สาธารณะและวันที่เพิ่ม

ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบของคีย์และวิธีสร้างได้ที่คีย์เซิร์ฟเวอร์แอปพลิเคชัน

ติดตั้งปลั๊กอิน FCM

  1. ติดตั้งและเริ่มต้นใช้งานปลั๊กอิน Firebase สําหรับ Flutter หากยังไม่ได้ดำเนินการ

  2. จากรูทของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอิน

    flutter pub add firebase_messaging
    
  3. เมื่อเสร็จแล้ว ให้สร้างแอปพลิเคชัน Flutter อีกครั้งโดยทำดังนี้

    flutter run
    

เข้าถึงโทเค็นการลงทะเบียน

หากต้องการส่งข้อความไปยังอุปกรณ์ที่ต้องการ คุณต้องทราบโทเค็นการลงทะเบียนของอุปกรณ์นั้น เนื่องจากคุณจะต้องป้อนโทเค็นในช่องในคอนโซลการแจ้งเตือนเพื่อทําตามบทแนะนํานี้ให้เสร็จสมบูรณ์ โปรดคัดลอกโทเค็นหรือจัดเก็บโทเค็นอย่างปลอดภัยหลังจากดึงข้อมูลแล้ว

หากต้องการเรียกข้อมูลโทเค็นการลงทะเบียนปัจจุบันสําหรับอินสแตนซ์แอป ให้เรียกใช้ getToken() หากยังไม่ได้ให้สิทธิ์การแจ้งเตือน วิธีการนี้จะขอสิทธิ์การแจ้งเตือนจากผู้ใช้ ไม่เช่นนั้น ระบบจะแสดงผลโทเค็นหรือปฏิเสธอนาคตเนื่องจากเกิดข้อผิดพลาด

// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);

// For apple platforms, ensure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
 // APNS token is available, make FCM plugin API requests...
}

ในแพลตฟอร์มเว็บ ให้ส่งคีย์สาธารณะ VAPID ไปยัง getToken()

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

หากต้องการรับการแจ้งเตือนทุกครั้งที่มีการอัปเดตโทเค็น ให้ติดตามonTokenRefresh สตรีมต่อไปนี้

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

ป้องกันการเริ่มต้นอัตโนมัติ

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

iOS

ใน iOS ให้เพิ่มค่าข้อมูลเมตาลงในInfo.plistดังนี้

FirebaseMessagingAutoInitEnabled = NO

Android

ใน Android ให้ปิดใช้การเก็บรวบรวมข้อมูล Analytics และการจัดเตรียม FCM โดยอัตโนมัติ (คุณต้องปิดใช้ทั้ง 2 อย่าง) โดยเพิ่มค่าข้อมูลเมตาต่อไปนี้ลงใน AndroidManifest.xml

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

เปิดใช้การเริ่มต้น FCM อัตโนมัติอีกครั้งเมื่อรันไทม์

หากต้องการเปิดใช้การเริ่มต้นอัตโนมัติสำหรับอินสแตนซ์แอปที่เฉพาะเจาะจง ให้เรียกใช้ setAutoInitEnabled() ดังนี้

await FirebaseMessaging.instance.setAutoInitEnabled(true);

ค่านี้จะยังคงอยู่เมื่อแอปรีสตาร์ทอีกครั้งหลังจากตั้งค่าแล้ว

ขั้นตอนถัดไป

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

หากต้องการเพิ่มลักษณะการทำงานขั้นสูงอื่นๆ ลงในแอป คุณจะต้องติดตั้งใช้งานเซิร์ฟเวอร์

จากนั้นทำดังนี้ในไคลเอ็นต์แอป