หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

รับข้อความในไคลเอนต์ JavaScript

ลักษณะการทำงานของข้อความจะแตกต่างกันไปขึ้นอยู่กับว่าเพจนั้นอยู่เบื้องหน้า (มีโฟกัส) หรืออยู่เบื้องหลังซ่อนอยู่หลังแท็บอื่นหรือปิดสนิท ในทุกกรณีเพจต้องจัดการกับการเรียกกลับ onMessage แต่ในกรณีพื้นหลังคุณอาจต้องจัดการ setBackgroundMessageHandler หรือกำหนดค่าการแจ้งเตือนการแสดงผลเพื่ออนุญาตให้ผู้ใช้นำเว็บแอปของคุณไปที่เบื้องหน้า

สถานะแอป การแจ้งเตือน ข้อมูล ทั้งสอง
เบื้องหน้า onMessage onMessage onMessage
ภูมิหลัง (พนักงานบริการ) การแจ้งเตือนที่แสดงโดย SDK setBackgroundMessageHandler การแจ้งเตือนที่แสดงโดย SDK

ตัวอย่างการเริ่มต้นอย่างรวดเร็วของ JavaScript แสดงรหัสทั้งหมดที่จำเป็นในการรับข้อความ

จัดการข้อความเมื่อเว็บแอปของคุณอยู่เบื้องหน้า

ในการรับเหตุการณ์ onMessage แอปของคุณต้องกำหนดผู้ปฏิบัติงานบริการการส่งข้อความ Firebase ใน firebase-messaging-sw.js หรือคุณสามารถระบุพนักงานบริการที่มีอยู่โดยใช้ useServiceWorker

// Give the service worker access to Firebase Messaging.
// Note that you can only use Firebase Messaging here, other Firebase libraries
// are not available in the service worker.
importScripts('https://www.gstatic.com/firebasejs/7.17.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.17.2/firebase-messaging.js');

// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
firebase.initializeApp({
  apiKey: 'api-key',
  authDomain: 'project-id.firebaseapp.com',
  databaseURL: 'https://project-id.firebaseio.com',
  projectId: 'project-id',
  storageBucket: 'project-id.appspot.com',
  messagingSenderId: 'sender-id',
  appId: 'app-id',
  measurementId: 'G-measurement-id',
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();

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

// Handle incoming messages. Called when:
// - a message is received while the app has focus
// - the user clicks on an app notification created by a service worker
//   `messaging.setBackgroundMessageHandler` handler.
messaging.onMessage((payload) => {
  console.log('Message received. ', payload);
  // ...
});

จัดการข้อความเมื่อเว็บแอปของคุณอยู่เบื้องหลัง

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

การตั้งค่าตัวเลือกการแจ้งเตือนในคำขอส่ง

สำหรับข้อความแจ้งเตือนที่ส่งจากเซิร์ฟเวอร์แอป FCM JavaScript API รองรับคีย์ fcm_options.link โดยทั่วไปจะตั้งค่าเป็นเพจในเว็บแอปของคุณ:

https://fcm.googleapis.com//v1/projects/<YOUR-PROJECT-ID>/messages:send
Content-Type: application/json
Authorization: bearer <YOUR-ACCESS-TOKEN>

{
  "message": {
    "token": "eEz-Q2sG8nQ:APA91bHJQRT0JJ..."
    "notification": {
      "title": "Background Message Title",
      "body": "Background message body"
    },
    "webpush": {
      "fcm_options": {
        "link": "https://dummypage.com"
      }
    }
  }
}

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

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

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

การตั้งค่าตัวเลือกการแจ้งเตือนในพนักงานบริการ

สำหรับข้อความข้อมูลคุณสามารถตั้งค่าตัวเลือกการแจ้งเตือนในพนักงานบริการ ขั้นแรกเริ่มต้นแอปของคุณในพนักงานบริการ:

// Give the service worker access to Firebase Messaging.
// Note that you can only use Firebase Messaging here, other Firebase libraries
// are not available in the service worker.
importScripts('https://www.gstatic.com/firebasejs/7.17.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.17.2/firebase-messaging.js');

// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
firebase.initializeApp({
  apiKey: 'api-key',
  authDomain: 'project-id.firebaseapp.com',
  databaseURL: 'https://project-id.firebaseio.com',
  projectId: 'project-id',
  storageBucket: 'project-id.appspot.com',
  messagingSenderId: 'sender-id',
  appId: 'app-id',
  measurementId: 'G-measurement-id',
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();

ในการตั้งค่าตัวเลือกให้เรียก setBackgroundMessageHandler ใน firebase-messaging-sw.js ในตัวอย่างนี้เราสร้างการแจ้งเตือนด้วยช่องชื่อเนื้อหาและไอคอน

messaging.setBackgroundMessageHandler(function(payload) {
  console.log('[firebase-messaging-sw.js] Received background message ', payload);
  // Customize notification here
  const notificationTitle = 'Background Message Title';
  const notificationOptions = {
    body: 'Background Message body.',
    icon: '/firebase-logo.png'
  };

  return self.registration.showNotification(notificationTitle,
    notificationOptions);
});

แนวทางปฏิบัติที่ดีที่สุดสำหรับการแจ้งเตือน

หากคุณคุ้นเคยกับการส่งข้อความแบบพุชสำหรับเว็บคุณอาจอ่านหลักเกณฑ์กว้าง ๆ เกี่ยวกับ สิ่งที่ทำให้เกิดการแจ้งเตือนที่ดีแล้ว สำหรับนักพัฒนาที่ส่งการแจ้งเตือนผ่าน FCM สำหรับเว็บข้อพิจารณาที่สำคัญที่สุดคือความแม่นยำและความเกี่ยวข้อง คำแนะนำเฉพาะบางประการสำหรับการทำให้การแจ้งเตือนของคุณแม่นยำและตรงประเด็นมีดังนี้

  • ใช้ช่องไอคอนเพื่อส่งภาพที่มีความหมาย สำหรับกรณีการใช้งานจำนวนมากนี่ควรเป็นโลโก้ บริษัท หรือแอปที่ผู้ใช้ของคุณจดจำได้ทันที หรือสำหรับแอปพลิเคชันแชทอาจเป็นรูปโปรไฟล์ของผู้ใช้ที่ส่ง
  • ใช้ช่องชื่อเพื่อแสดงลักษณะที่ชัดเจนของข้อความ ตัวอย่างเช่น "จิมมี่ตอบกลับ" สื่อถึงข้อมูลที่แม่นยำกว่า "ข้อความใหม่" อย่าใช้พื้นที่อันมีค่านี้สำหรับชื่อ บริษัท หรือแอปของคุณ - ใช้ไอคอนเพื่อจุดประสงค์นั้น
  • อย่าใช้ชื่อหรือเนื้อหาการแจ้งเตือนเพื่อแสดงชื่อเว็บไซต์หรือโดเมนของคุณ การแจ้งเตือนมีชื่อโดเมนของคุณอยู่แล้ว
  • เพิ่ม fcm_options.link โดยปกติเพื่อเชื่อมโยงผู้ใช้กลับไปที่เว็บแอปของคุณและนำไปโฟกัสในเบราว์เซอร์ ในบางกรณีที่ข้อมูลทั้งหมดที่คุณต้องการสื่อสามารถเข้ากับการแจ้งเตือนได้ไม่บ่อยนักคุณอาจไม่จำเป็นต้องใช้ลิงก์