สวัสดีครับ ในบทความวันนี้จะเป็นการแนะนำ การส่ง Push Notification ไปยัง Web Browser ด้วย Cloud Messaging ใน Firebase กันครับ
มาเริ่มกันเลย ก่อนอื่นเราต้องไปสร้าง Project ที่ Firebase Console กันก่อนครับ
https://console.firebase.google.com
1.เมื่อเข้ามาแล้วคลิกที่ Add Project
2.ตั้งชื่อ Project Name (ตัวอย่างใช้ชื่อว่า FcmToWeb ) จากนั้นคลิกปุ่ม Continue
3.จากนั้นคลิกปุ่ม Continue
4.จากนั้นคลิกปุ่ม Create Project
5.รอระบบสร้าง Project สักครู่จากนั้นคลิกปุ่ม Continue
6.จะมาที่หน้า Console ของ Firebase จะมีให้เลือกว่าเราจะใช้งาน Project แบบใด จะมี IOS , ANDROID , WEB
เลือก WEB ตามภาพ
7.ต่อมาจะให้ตั้ง App nickname (ตัวอย่างตั้งชื่อว่า NotifyMe) จากนั้นคลิก Register app
8.จากนั้นระบบจะแสดง Firebase SDK สำหรับนำไปใช้งานต่อ (ให้ Copy Code ชุดนี้เก็บไว้เขียน Code ต่อไปครับ)
*หากใครลืม Copy ไว้ไม่เป็นไรครับ ตอนท้ายจะมาบอกว่าต้องไปคลิกดูตรงไหนครับ

9.คลิก Continue to Console ระบบจะกลับไปที่ หน้า console ของ Firebase
เสร็จขั้นตอนการสร้าง Project ที่ Firebase แล้วครับ หลังจากนี้เราจะมาเริ่มเขียน Code กันครับ
ในการทดสอบต้องใช้ Server ที่เป็น https ครับ
ตัวอย่างโครงสร้าง
-index.html
-manifest.json
-firebase-messaging-sw (สำหรับไฟล์นี้จะต้องวางไว้ที่ Root ของ Web Site เสมอครับ)
10.สร้างไฟล์ index.html
นำค่า Config ที่ Copy ไว้ในขั้นตอนก่อนหน้ามาวางแทนที่ ค่าเดิมดังนี้
<html>
<head>
<title>FCM Cloud Messaging</title>
</head>
<body>
<div id="token"></div>
<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/8.6.7/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.6.7/firebase-messaging.js"></script>
<!-- TODO: Add SDKs for Firebase products that you want to use
https://firebase.google.com/docs/web/setup#available-libraries -->
<script>
TokenShow = document.getElementById("token");
// นำค่า Config ที่ Copy ไว้ในตอนแรก มาวางทีนี่
var firebaseConfig = {
apiKey: "AIzaSyA4Xjf2l-J_3XTMDCaCNg7u1YG9CVPLEAE",
authDomain: "fcmtoweb.firebaseapp.com",
projectId: "fcmtoweb",
storageBucket: "fcmtoweb.appspot.com",
messagingSenderId: "361506304096",
appId: "1:361506304096:web:76cc3c17db2113deb9d305",
measurementId: "G-1RSV0Y2FGG"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
messaging.requestPermission().then(function () {
console.log("Notification permission granted.");
// get the token in the form of promise
return messaging.getToken();
}).then(function(token) {
//สามารถนำ token ไปใช้สำหรับ ส่ง Push
TokenShow.innerHTML = token;
}).catch(function (err) {
console.log(err);
});
</script>
</body>
</html>
11.สร้างไฟล์ manifest.json
{
"//_comment1": "Some browsers will use this to enable push notifications.",
"//_comment2": "It is the same for all projects, this is not your project's sender ID",
"gcm_sender_id": "103953800507"
}
12.สร้างไฟล์ firebase-messaging-sw (ไฟล์นี้จะต้องวางไว้ที่ Root ของ Web Site เสมอ)
นำค่า Config ที่ Copy ไว้ในขั้นตอนก่อนหน้ามาวางแทนที่ ค่าเดิมดังนี้
importScripts('https://www.gstatic.com/firebasejs/8.6.7/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/8.6.7/firebase-messaging.js');
// นำค่า Config ที่ Copy ไว้ในตอนแรก มาแทนค่าทีนี่
firebase.initializeApp({
apiKey: "AIzaSyA4Xjf2l-J_3XTMDCaCNg7u1YG9CVPLEAE",
authDomain: "fcmtoweb.firebaseapp.com",
projectId: "fcmtoweb",
storageBucket: "fcmtoweb.appspot.com",
messagingSenderId: "361506304096",
appId: "1:361506304096:web:76cc3c17db2113deb9d305",
measurementId: "G-1RSV0Y2FGG"
});
// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();
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,
);
});
13.ทดสอบการทำงาน
เมื่อมีการเรียกไฟล์ index.html จะมีการ ขอ Permission Notifications คลิกเลือก Allow
14.Web Browser จะแสดง Token สำหรับใช้ส่ง Notifications ดังภาพ
Copy Token เก็บไว้เพื่อนำไปใช้ทดสอบการส่ง Notifications ใน Firebase Console
15.กลับไปที่ Firebase Console เลือก Project ที่ได้สร้างไว้ตอนแรก
– เลือกเมนู Cloud Messaging
– คลิกปุ่ม Send Your First Message
16.ระบุข้อความทดสอบ จากนั้นคลิกปุ่ม Send test message
17.นำ token ที่ Copy ไว้จากขั้นตอนก่อนหน้าวาง ตามภาพ จากนั้นคลิกปุ่ม +
18.คลิกปุ่ม Test เพื่อส่งข้อความทดสอบไปยัง Browser
19.ตัวอย่าง หากมีการส่ง Notifications สำเร็จ จะมี POP UP ข้อความทดสอบ ดังภาพ
คงจะไม่สะดวกหากเราต้องเข้ามาที่ Firebase เพื่อส่งข้อความทุกครั้ง เราจึงมีทางเลือกที่ดีกว่าด้วยการส่งด้วย PHP curl ครับ
การส่ง Push Notifications ด้วย PHP CURL
– กลับไปที่ Firebase Console ก่อนครับ
– คลิกรูปฟันเฟือง ตรงเมนู Project Overview
– คลิก Tab Cloud Messaging
– Copy Server Key เก็บไว้ใช้ในขั้นตอนต่อไปครับ
<?php
$url = "https://fcm.googleapis.com/fcm/send";
$token = "token ที่ได้จาก ฺBrowser ในขั้นตอนก่อนหน้า";
$serverKey = 'Server Key ที่ Copy เก็บไว้';
$title = "ทดสอบ";
$body = "ข้อความทดสอบ";
$notification = array(
'title' =>$title ,
'body' => $body,
//'icon' => '',
'priority'=>'high',
'sound' => 'default'
);
$arrayToSend = array(
'to' => $token,
'notification' => $notification,
);
$json = json_encode($arrayToSend);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: key='.$serverKey;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true );
//Send the request
$response = curl_exec($ch);
echo '<pre>';
print_r($response);
echo '</pre>';
?>
เพียงเท่านี้เราก็สามารถ นำ Token ที่ได้จาก Browser มาส่งด้วย PHP ได้แล้วครับ
การเรียกดูค่า Config Firebase SDK
– ไปที่ Firebase Console
– คลิกรูปฟันเฟือง ตรงเมนู Project Overview
– คลิก Tab General

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