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

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

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

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

iOS ขึ้นไป

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

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

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

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

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

  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);

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

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

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

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

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