本次要跟姊姊一起學習Vue 3 + Firebase Cloud Messaging 測試一筆訊息通知吧!
▶ 如果您尚未建立專案/安裝 Firebase JS SDK 並初始化 Firebase,請先到
開箱23:Vue 3 + 建立web應用程式+Firebase JS SDK 初始化
▶ 若需要跳出的通知視窗,可參考
開箱15:輕鬆套用訊息通知UI~Vue 3 Toastify範例應用
今日步驟
官方文件:
開箱23:Vue 3 + 建立web應用程式+Firebase JS SDK 初始化
開始實作本次功能吧!
版本 "firebase": "^10.4.0"
☆★☆★ 詳細程式碼 前往 >> 本次程式 commit 紀錄
詳細請看:官方文件Add and initialize the FCM SDK
修改src/services/firebase.js
import { initializeApp } from 'firebase/app';
import { getMessaging } from 'firebase/messaging'; //新增
const firebaseConfig = {
apiKey: '...',
authDomain: '...',
projectId: '...',
storageBucket: '...',
messagingSenderId: '...',
appId: '...'
};
// 初始化 Firebase
export const setupFirebase = initializeApp(firebaseConfig);
// 取得 getMessaging實例
export const messaging = getMessaging(setupFirebase); // 新增
開啟 Firebase 控制台「專案設定」窗格的「雲端通訊」選項,然後捲動至下方「Web 設定」
在「Web 推送憑證」標籤中,按一下「產生金鑰」。
複製所產出的金鑰
新增getToken
< YOUR_PUBLIC_VAPID_KEY_HERE > 貼上你剛剛申請的憑證
修改src/services/firebase.js
import { initializeApp } from 'firebase/app';
import { getMessaging,getToken } from 'firebase/messaging'; //新增
const firebaseConfig = {
apiKey: '...',
authDomain: '...',
projectId: '...',
storageBucket: '...',
messagingSenderId: '...',
appId: '...'
};
// 初始化 Firebase
export const setupFirebase = initializeApp(firebaseConfig);
// 取得 getMessaging實例
export const messaging = getMessaging(setupFirebase);
getToken(messaging, { vapidKey: '<YOUR_PUBLIC_VAPID_KEY_HERE>' })
.then(currentToken => {
if (currentToken) {
// Send the token to your server and update the UI if necessary
// ...
console.log('currentToken', currentToken);
} else {
// Show permission request UI
console.log(
'No registration token available. Request permission to generate one.'
);
// ...
}
})
.catch(err => {
console.log('An error occurred while retrieving token. ', err);
// ...
});
Firebase 有自己的 service worker,檔名叫做firebase-messaging-sw.js,位置需放在根目錄下,以vue 來說,就放在 public 目錄下
onMessage...
//修改src/services/firebase.js
import { initializeApp } from 'firebase/app';
import { getMessaging,getToken, onMessage } from 'firebase/messaging'; //新增
const firebaseConfig = {
apiKey: '...',
authDomain: '...',
projectId: '...',
storageBucket: '...',
messagingSenderId: '...',
appId: '...'
};
// 初始化 Firebase
export const setupFirebase = initializeApp(firebaseConfig);
// 取得 getMessaging實例
export const messaging = getMessaging(setupFirebase);
onMessage(messaging, payload => {
console.log('Message received. ', payload);
// ...
});
getToken(messaging, { vapidKey: '<YOUR_PUBLIC_VAPID_KEY_HERE>' })
...
});
這個的目的是串接service-worker產生離線推播
將public/firebase-messaging-sw.js
內容新增以下 (兩張圖的內容)
▼ 記得修改你的config (如同firebase.js檔案的資料)
▼ 記得修改通知的title&option
▼ 修改結果如下
importScripts('https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js');
importScripts(
'https://www.gstatic.com/firebasejs/8.10.1/firebase-messaging.js'
);
firebase.initializeApp({
apiKey: '...',
authDomain: '...',
projectId: '...',
storageBucket: '...',
messagingSenderId: '...',
appId: '...'
});
const messaging = firebase.messaging();
messaging.onBackgroundMessage(function (payload) {
console.log(
'[firebase-messaging-sw.js] Received background message ',
payload
);
// Customize notification here
const notificationTitle = payload.notification.title;//記得修改為參數標題
const notificationOptions = {
body: payload.notification.body, //記得修改為參數內文
icon: '/vite.svg' // 記得修改為參數圖示(自行決定要放什麼圖)
};
self.registration.showNotification(notificationTitle, notificationOptions);
});
完成之後
接著回到你的專案,會出現
按下允許就會取得currentToken
將這個Token複製起來
回到Firebase console 控制台,開啟Messaging
點選「建立第一個廣告活動」,跳出以下畫面,選擇第一項
跳出以下畫面,寫一則測試的標題及內容吧!
▼將剛剛複製的token貼到這邊,然後按「測試」
接著按下「測試」,回到專案看console
這樣在開啟網頁下就成功接收到了!
別忘了在剛剛的監聽收到訊息的函式裡面,新增通知元件
//回到 src/services/firebase.js
...
onMessage(messaging, payload => {
console.log('Message received. ', payload);
toast(`${payload.notification.title}<br>${payload.notification.body}`); //通知UI
});
...
結果如下
那接著試著將網頁關閉,再發送一次通知,
這樣在離線之下也可以成功接收到了!
延伸閱讀: