請問,網頁推播的前台是正常,但是在手機前台狀況下卻沒有辦法顯示。
查詢是var notification = new Notification(notifyMsg.tit....
此段程是沒有執行到(網頁版沒有問題),請問是哪邊設定出錯?
<head>
<base href="">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="manifest" href="manifest.json">
</head>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.6.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.6.1/firebase-messaging.js"></script>
<script type="text/javascript">
var messaging = null;
// 開始判斷
$(window).on('load',function(){
mess_check();
});
// 判斷
function mess_check(){
// 提示瀏覽器不支援
if(!service_check()){
// 不支援提示
console.log("瀏覽器不支援");
return;
}
// 啟動Firebase
firebase_run();
// 允許(取得Token)
if(Notification.permission=='granted'){
console.log("推播允許");
}
// 拒絕(拒絕提示)
else if(Notification.permission=='denied'){
console.log("Notification.permission='denied'");
console.log("推播拒絕");
}
// 未判斷(提示允許)
else if(Notification.permission=='default'){
console.log("Notification.permission='default'");
$("#push_check").modal('show');
}
}
// 啟動Firebase
function firebase_run(){
// Firebase 專案設定
var firebaseConfig = {
apiKey: "AIzaSyDgu1aSqfLX-LIPabasyXZKOpkntu1zZ8c",
authDomain: "eatfood-b38e7.firebaseapp.com",
databaseURL: "https://eatfood-b38e7.firebaseio.com",
projectId: "eatfood-b38e7",
storageBucket: "eatfood-b38e7.appspot.com",
messagingSenderId: "143139701423",
appId: "1:143139701423:web:ba1fbd55e8b55e55a34a5a",
measurementId: "G-GQ27ZK9QBW"
};
// 初始firebase
firebase.initializeApp(firebaseConfig);
// 指定 SW firebase-messaging-sw.js 的路徑與本 html 檔相同
navigator.serviceWorker.register('eat_push_firebase-messaging-sw.js')
.then((registration) => {
messaging.useServiceWorker(registration);
});
// 啟動 Firebase Messaging
messaging = firebase.messaging();
// 收到訊息時的處理(前景)
messaging.onMessage(function (payload) {
console.log('onMessage run');
//如果可以顯示通知就做顯示通知
if (Notification.permission === 'granted') {
notifyMe(payload);
}
});
}
// 視窗提示訊息
function notifyMe(payload) {
if (!("Notification" in window)) {
console.log("This browser does not support desktop notification");
}
else if (Notification.permission === "granted") {
show_win(payload);
}
else if (Notification.permission !== 'denied' || Notification.permission === "default") {
console.log("This browser requestPermission");
// 取得授權狀態
Notification.requestPermission(function (permission) {
if (permission === "granted") {
show_win(payload);
};
});
};
};
// 視窗訊息
function show_win(payload){
console.log('onMessage: ', payload);
var notifyMsg = payload.data;
var notification = new Notification(notifyMsg.title,
{
body: notifyMsg.body,
icon: notifyMsg.icon
});
notification.onclick = function (e) { // 綁定點擊事件
e.preventDefault(); // prevent the browser from focusing the Notification's tab
window.open(notifyMsg.click_action);
}
}
// 判斷瀏覽器是否支援
function service_check(){
if('serviceWorker' in navigator) {
return true;
}
return false;
}
// 判斷是否允許推播
function push_check(){
if (('Notification' in window)) {
return true;
}
return false;
}
</script>
eat_push_firebase-messaging-sw.js
importScripts('https://www.gstatic.com/firebasejs/4.6.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.6.1/firebase-messaging.js');
firebase.initializeApp({
'messagingSenderId': 'G-GQ27ZK9QBW'
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
console.log('Received background message ', payload);
const notificationTitle = payload.data.title;
const notificationOptions = {
body: payload.data.body,
icon: payload.data.icon,
click_action: payload.data.click_action
};
return self.registration.showNotification(notificationTitle, notificationOptions);
});
self.addEventListener('install', function() {
self.skipWaiting();
});
console.log("Loaded SW..");