PWA之消息推送——Notification

原文

博客原文

大綱

1励堡、推送通知的概念
2翩隧、消息推送的知識點
3、實例

1姻蚓、推送通知的概念

大部分現(xiàn)代 Web 應(yīng)用都需要定期更新和與用戶溝通的能力宋梧。比如社交媒體、郵件和應(yīng)用通知都很不錯狰挡,但并不總是能夠吸引用戶的注意捂龄,尤其是當(dāng)他們離開網(wǎng)站的時候。
這正是推送通知出現(xiàn)的契機加叁。它們是出現(xiàn)在你設(shè)備上的有用通知倦沧,提示可能對你有用的相關(guān)信息。你可以簡單地滑動或點擊按鈕來關(guān)閉它們它匕,或者可以點擊它們展融,并立即指向具有相關(guān)信息的網(wǎng)頁。傳統(tǒng)上豫柬,只有原生應(yīng)用具有這種超棒的能力告希,它會利用設(shè)備的操作系統(tǒng)并發(fā)送推送通知。這也正是 PWA 成為 Web 顛覆者的切入點烧给。它們有能力接收出現(xiàn)在瀏覽器中的推送通知燕偶。
推送通知最棒的是即使用戶沒有瀏覽你的網(wǎng)站也會收到這些更新。體驗類似于原生應(yīng)用础嫡,而且即使瀏覽器沒有運行也可以工作指么。這使它成為與用戶互動并將其拉回至 Web 應(yīng)用的完美方法,即使用戶在一段時間內(nèi)沒有打開瀏覽器榴鼎。例如涧尿,如果你的網(wǎng)站是個天氣應(yīng)用,推送通知可以為你的用戶提供像“惡劣天氣即將來臨的警告”這樣有用的信息檬贰。你甚至可以安排每周的天氣預(yù)報姑廉,它們可以根據(jù)用戶訂閱的來發(fā)送推送通知,這將有無限的可能性翁涤!
推送通知是與用戶互動的好方法桥言,即使用戶沒在訪問你的網(wǎng)站或已經(jīng)關(guān)閉了瀏覽器窗口。
為了給用戶發(fā)送推送消息葵礼,首先需要用戶授權(quán)号阿。這為開發(fā)者提供了基于用戶設(shè)備和瀏覽器的唯一訂閱詳情。
一旦用戶授權(quán)了鸳粉,需要保存他們的訂閱詳情扔涧,以便向他們發(fā)送消息。

2、消息推送的知識點
2.1. Notification.requestPermission()

這是一個靜態(tài)方法枯夜,作用就是讓瀏覽器出現(xiàn)是否允許通知的提示弯汰,window系統(tǒng)Chrome瀏覽器目前的UI效果是這樣的:

image.png

語法目前有新舊兩種,下面這個是最近規(guī)范上更新的基于promise的語法:

Notification.requestPermission().then(function(permission) { ... });

下面這個是基于簡單的回調(diào):

Notification.requestPermission(callback);

其中callback是可選參數(shù)湖雹,根據(jù)MDN的說法咏闪,Gecko 46開始舍棄了這種語法,但是摔吏,我自己使用FireFox 47測試鸽嫂,跑得很正常(有part4的截圖為證)。難道FireFox的版本號不等同于Gecko的版本號征讲?
無論是then中的還是直接callback函數(shù)的參數(shù)都是一樣的据某,表示當(dāng)前是否允許。只會是granted, denied, 或default.
其中g(shù)ranted表示用戶允許通知诗箍,denied表示用戶嫌棄你哗脖,default表示用戶目前還沒有管你。

Notification.requestPermission().then(function(result) {
  // result可能是是granted, denied, 或default.
});
2.2. Notification.permission[只讀]

這是一個靜態(tài)屬性扳还。表示是否允許通知才避,值就是上面的granted, denied, 或default.
默認(rèn)情況下,Notification.permission的值是'default':
因此氨距,Notification.requestPermission()的回調(diào)方法中桑逝,可以不使用result參數(shù),直接使用Notification.permission獲取當(dāng)前的通知狀態(tài)俏让。

2.3. new Notification(title, options)
/*
    通過new構(gòu)造楞遏,顯示通知。其中title是必須參數(shù)首昔,表示通知小框框的標(biāo)題內(nèi)容寡喝,
options是可選參數(shù),對象勒奇,支持的參數(shù)以及釋義見下表:
*/
options
dir
/*
    默認(rèn)值是auto, 可以是ltr或rtl预鬓,有點類似direction屬性。表示提示主體內(nèi)容的水平
書寫順序赊颠。
*/
lang
/*
    提示的語言格二。沒看出來有什么用。大家可以忽略之~
*/
body
/*
    提示主體內(nèi)容竣蹦。字符串顶猜。會在標(biāo)題的下面顯示。比方說上面的“好岸焕ā长窄!(害羞.gif)”滔吠。
*/
tag
/*
    字符串。標(biāo)記當(dāng)前通知的標(biāo)簽挠日。
*/
icon
/*
    字符串疮绷。通知面板左側(cè)那個圖標(biāo)地址。
*/
data
/*
    任意類型和通知相關(guān)聯(lián)的數(shù)據(jù)肆资。
*/
vibrate
/*
    通知顯示時候矗愧,設(shè)備震動硬件需要的振動模式灶芝。所謂振動模式郑原,指的是一個描述
交替時間的數(shù)組,分別表示振動和不振動的毫秒數(shù)夜涕,一直交替下去犯犁。例如[200, 100, 200]表
示設(shè)備振動200毫秒,然后停止100毫秒女器,再振動200毫秒酸役。
*/
renotify
/*
    布爾值。新通知出現(xiàn)的時候是否替換之前的驾胆。如果設(shè)為true涣澡,則表示替換,表示當(dāng)前標(biāo)記
的通知只會出現(xiàn)一個丧诺。注意都這里“當(dāng)前標(biāo)記”沒入桂?沒錯,true參數(shù)要想其作用驳阎,必須tag需要
設(shè)置屬性值抗愁。然后,通知就會像這樣覆蓋:
    
    而不會是默認(rèn)的疊高樓:
*/
silent
/*
    布爾值呵晚。通知出現(xiàn)的時候蜘腌,是否要有聲音。默認(rèn)false, 表示無聲饵隙。
*/
sound
/*
    字符串撮珠。音頻地址。表示通知出現(xiàn)要播放的聲音資源金矛。
*/
noscreen
/*
    布爾值劫瞳。是否不再屏幕上顯示通知信息。默認(rèn)false, 表示要在屏幕上顯示通知內(nèi)容绷柒。
*/
sticky
/*
    布爾值志于。是否通知具有粘性,這樣用戶不太容易清除通知废睦。默認(rèn)false, 表示沒有粘性伺绽。
根據(jù)我自己的猜測,應(yīng)該和position的sticky屬性值類似。
*/
2.4. Notification.close()

通知顯示了奈应,如何關(guān)閉呢澜掩?可以通過調(diào)用Notification.close()實例方法實現(xiàn)關(guān)閉

3、實例
/*
獲得權(quán)限
這行代碼在這里不起作用杖挣,因為可以通過permission來判斷是否具有權(quán)限肩榕,當(dāng)然可以通過這
個方式來人為獲取權(quán)限,然后再根據(jù)使用者的行為來判斷是否繼續(xù)進行之后的代碼惩妇,畢竟默認(rèn)
的權(quán)限是default
var reqPermission = Notification.requestPermission();
點擊按鈕
*/
document.querySelector('#button').addEventListener('click', function () {
    if (Notification.permission == "granted") {
        var notification = new Notification("Hi株汉,帥哥:", {
            body: '可以加你為好友嗎?',
            icon: './images/icon-1.png'
        });
        var text = document.querySelector('#text');
        notification.onclick = function() {
            text.innerHTML = '張小姐已于' + new Date().toTimeString().split(' ')[0] + '加你為好友歌殃!';
            notification.close();    
        };
        setTimeout(function(){
            notification.close(); 
        },5000);
    }else {
        alert('bye bye');
    }  
});
參考網(wǎng)址

http://www.zhangxinxu.com/wordpress/2016/07/know-html5-web-notification/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乔妈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氓皱,更是在濱河造成了極大的恐慌路召,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件波材,死亡現(xiàn)場離奇詭異股淡,居然都是意外死亡,警方通過查閱死者的電腦和手機廷区,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門唯灵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人躲因,你說我怎么就攤上這事早敬。” “怎么了大脉?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵搞监,是天一觀的道長。 經(jīng)常有香客問我镰矿,道長琐驴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任秤标,我火速辦了婚禮绝淡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苍姜。我一直安慰自己牢酵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布衙猪。 她就那樣靜靜地躺著馍乙,像睡著了一般布近。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丝格,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天撑瞧,我揣著相機與錄音,去河邊找鬼显蝌。 笑死预伺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的曼尊。 我是一名探鬼主播酬诀,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涩禀!你這毒婦竟也來了料滥?” 一聲冷哼從身側(cè)響起然眼,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤艾船,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后高每,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屿岂,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年鲸匿,在試婚紗的時候發(fā)現(xiàn)自己被綠了爷怀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡带欢,死狀恐怖运授,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乔煞,我是刑警寧澤吁朦,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站渡贾,受9級特大地震影響逗宜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜空骚,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一纺讲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囤屹,春花似錦熬甚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽复局。三九已至,卻和暖如春粟判,著一層夾襖步出監(jiān)牢的瞬間亿昏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工档礁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留角钩,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓呻澜,卻偏偏與公主長得像递礼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子羹幸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容