ตั้งค่าแอพไคลเอนต์ Firebase Cloud Messaging บน Flutter

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

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

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

iOS+

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

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

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

อัปโหลดคีย์การตรวจสอบสิทธิ์ APN ของคุณ

ก่อนที่คุณจะใช้ FCM ให้อัปโหลดใบรับรอง APN ไปยัง Firebase หากคุณยังไม่มีใบรับรอง APN ให้สร้างขึ้นใน Apple Developer Member Center

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

วิธีการ ฉวัดเฉวียน

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

Android

บริการ Google Play

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

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

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

เว็บ

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

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

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

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

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

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

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

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

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

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

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

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

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

    flutter pub add firebase_messaging
    
  3. เมื่อเสร็จแล้ว ให้สร้างแอปพลิเคชัน Flutter ของคุณใหม่:

    flutter run
    

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

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

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

final fcmToken = await FirebaseMessaging.instance.getToken();

บนแพลตฟอร์มเว็บ ส่งคีย์สาธารณะ 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 auto-init อีกครั้งที่รันไทม์

หากต้องการเปิดใช้งาน auto-init สำหรับอินสแตนซ์ของแอปเฉพาะ ให้เรียก setAutoInitEnabled() :

await FirebaseMessaging.instance.setAutoInitEnabled(true);

ค่านี้ยังคงอยู่ในการรีสตาร์ทแอปเมื่อตั้งค่า

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

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

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

จากนั้นในไคลเอนต์แอปของคุณ: