PWA之訊息推送 Notification

2022-09-02 04:45:11 字數 3096 閱讀 3491

1、推送通知的概念

2、訊息推送的知識點

3、例項

大部分現代 web 應用都需要定期更新和與使用者溝通的能力。比如社交**、郵件和應用通知都很不錯,但並不總是能夠吸引使用者的注意,尤其是當他們離開**的時候。

這正是推送通知出現的契機。它們是出現在你裝置上的有用通知,提示可能對你有用的相關資訊。你可以簡單地滑動或點選按鈕來關閉它們,或者可以點選它們,並立即指向具有相關資訊的網頁。傳統上,只有原生應用具有這種超棒的能力,它會利用裝置的作業系統並傳送推送通知。這也正是 pwa 成為 web 顛覆者的切入點。它們有能力接收出現在瀏覽器中的推送通知。

推送通知最棒的是即使使用者沒有瀏覽你的**也會收到這些更新。體驗類似於原生應用,而且即使瀏覽器沒有執行也可以工作。這使它成為與使用者互動並將其拉回至 web 應用的完美方法,即使使用者在一段時間內沒有開啟瀏覽器。例如,如果你的**是個天氣應用,推送通知可以為你的使用者提供像「惡劣天氣即將來臨的警告」這樣有用的資訊。你甚至可以安排每週的天氣預報,它們可以根據使用者訂閱的來傳送推送通知,這將有無限的可能性!

推送通知是與使用者互動的好方法,即使使用者沒在訪問你的**或已經關閉了瀏覽器視窗。

為了給使用者傳送推送訊息,首先需要使用者授權。這為開發者提供了基於使用者裝置和瀏覽器的唯一訂閱詳情。

一旦使用者授權了,需要儲存他們的訂閱詳情,以便向他們傳送訊息。

這是乙個靜態方法,作用就是讓瀏覽器出現是否允許通知的提示,window系統chrome瀏覽器目前的ui效果是這樣的:

語法目前有新舊兩種,下面這個是最近規範上更新的基於promise的語法:

notification.requestpermission().then(function(permission) );
下面這個是基於簡單的**:

notification.requestpermission(callback);
其中callback是可選引數,根據mdn的說法,gecko 46開始捨棄了這種語法,但是,我自己使用firefox 47測試,跑得很正常(有part4的截圖為證)。難道firefox的版本號不等同於gecko的版本號?

無論是then中的還是直接callback函式的引數都是一樣的,表示當前是否允許。只會是granted, denied, 或default.

其中granted表示使用者允許通知,denied表示使用者嫌棄你,default表示使用者目前還沒有管你。

notification.requestpermission().then(function(result) );
這是乙個靜態屬性。表示是否允許通知,值就是上面的granted, denied, 或default.

預設情況下,notification.permission的值是'default':

因此,notification.requestpermission()的**方法中,可以不使用result引數,直接使用notification.permission獲取當前的通知狀態。 

/*

通過new構造,顯示通知。其中title是必須引數,表示通知小框框的標題內容,

options是可選引數,物件,支援的引數以及釋義見下表:

*/options

dir/*

預設值是auto, 可以是ltr或rtl,有點類似direction屬性。表示提示主體內容的水平

書寫順序。

*/lang

/* 提示的語言。沒看出來有什麼用。大家可以忽略之~

*/body

/* 提示主體內容。字串。會在標題的下面顯示。比方說上面的「好啊!(害羞.gif)」。

*/tag

/* 字串。標記當前通知的標籤。

*/icon

/* 字串。通知面板左側那個圖示位址。

*/data

/* 任意型別和通知相關聯的資料。

*/vibrate

/* 通知顯示時候,裝置震動硬體需要的振動模式。所謂振動模式,指的是乙個描述

交替時間的陣列,分別表示振動和不振動的毫秒數,一直交替下去。例如[200, 100, 200]表

示裝置振動200毫秒,然後停止100毫秒,再振動200毫秒。

*/renotify

/* 布林值。新通知出現的時候是否替換之前的。如果設為true,則表示替換,表示當前標記

的通知只會出現乙個。注意都這裡「當前標記」沒?沒錯,true引數要想其作用,必須tag需要

設定屬性值。然後,通知就會像這樣覆蓋:

而不會是預設的疊高樓:

*/silent

/* 布林值。通知出現的時候,是否要有聲音。預設false, 表示無聲。

*/sound

/**/

noscreen

/* 布林值。是否不再螢幕上顯示通知資訊。預設false, 表示要在螢幕上顯示通知內容。

*/sticky

/* 布林值。是否通知具有粘性,這樣使用者不太容易清除通知。預設false, 表示沒有粘性。

根據我自己的猜測,應該和position的sticky屬性值類似。

*/

通知顯示了,如何關閉呢?可以通過呼叫notification.close()例項方法實現關閉

/*

獲得許可權

這行**在這裡不起作用,因為可以通過permission來判斷是否具有許可權,當然可以通過這

個方式來人為獲取許可權,然後再根據使用者的行為來判斷是否繼續進行之後的**,畢竟預設

的許可權是default

var reqpermission = notification.requestpermission();

點選按鈕

*/document.queryselector('#button').addeventlistener('click', function () );

var text = document.queryselector('#text');

notification.onclick = function() ;

settimeout(function(),5000);

}else

});

PWA之推送伺服器(koa2 mysql pm2)

koa2 pwa 是pwa推送伺服器的簡單實現,使用 koa2 開發,使用 mysql 資料庫儲存,使用 pm2 管理程序和日誌。檢視 pwa前端專案實現 pwa 訊息推送功能依賴於service worker 簡稱sw 使用 vapid 協議。server端使用 web push 生成vapidk...

QT動畫之訊息推送框

qt動畫之訊息推送框 這幾天專案中用到了做乙個訊息提示的動畫,這裡寫了乙個小測試demo,先看下效果 下面直接上 ifndef chnsyslawtipwidget h define chnsyslawtipwidget h include include include include class...

IOS訊息推送。

本來ios開發工程師說要使用個推,但是我們是做金融的,可能需要給使用者推送訂單狀態等等。這樣的話用起來就會很不方便,於是在網上找了找資料自己動手寫了乙個。就是簡易基礎的,希望大家看了能夠有用。需要引入幾個jar包 import com.notnoop.apns.apns import com.not...