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

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

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

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

iOS ขึ้นไป

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

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

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

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

ก่อนใช้ FCM ให้อัปโหลดใบรับรอง APNs ไปยัง Firebase หากไม่ มีใบรับรอง APNs แล้ว ให้สร้างใบรับรองใน Apple Developer Member Center

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

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

หากต้องการใช้ปลั๊กอิน FCM Flutter ในอุปกรณ์ Apple คุณต้องไม่ปิดใช้เมธอด ฟุ้งซ่านวุ่นวาย จำเป็นต้องมี Swizzing ยกเว้นฟีเจอร์หลักๆ ของ Firebase เช่น การจัดการโทเค็น FCM ทำงานไม่ถูกต้อง

Android

บริการ Google Play

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

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

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

เว็บ

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

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

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

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

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

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

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

  2. ในแท็บใบรับรองพุชจากเว็บ ให้ค้นหาและเลือกข้อความลิงก์ "นำเข้า คู่คีย์ที่มีอยู่"

  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 (คุณต้อง ปิดใช้ทั้งคู่) ด้วยการเพิ่มค่าข้อมูลเมตาเหล่านี้ลงใน 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);

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

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

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

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

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