ב-codelab הזה תשתמשו בתכונות בסיסיות של Notifications API כדי:
- בקשת הרשאה לשליחת התראות
- שליחת התראות
- ניסוי אפשרויות להתראות
היכרות עם אפליקציית ההתחלה והקוד שלה
כדאי להתחיל בבדיקת האפליקציה הפעילה בכרטיסיית Chrome חדשה:
מקישים על Control+Shift+J (או על Command+Option+J ב-Mac) כדי לפתוח את כלי הפיתוח. לוחצים על הכרטיסייה מסוף.
ההודעה הבאה אמורה להופיע במסוף:
Notification permission is defaultאם אתם לא יודעים מה זה אומר, אל דאגה, בקרוב הכול יתגלה!
לוחצים על הלחצנים באפליקציה הפעילה: בקשת הרשאה לשליחת התראות ושליחת התראה.
במסוף מודפסות הודעות TODO מכמה פונקציות stub:
requestPermissionו-sendNotification. אלה הפונקציות שתטמיעו בסדנת הקוד הזו.
עכשיו נסתכל על הקוד של האפליקציה לדוגמה.
פותחים את public/index.js ומעיינים בחלקים חשובים בקוד הקיים:
הפונקציה
showPermissionמשתמשת ב-Notifications API כדי לקבל את מצב ההרשאה הנוכחי של האתר ולרשום אותו במסוף:// Print current permission state to console; // update onscreen message. function showPermission() { let permission = Notification.permission; console.log('Notification permission is ' + permission); let p = document.getElementById('permission'); p.textContent = 'Notification permission is ' + permission; }לפני שמבקשים הרשאה, מצב ההרשאה הוא
default. במצב ההרשאהdefault, אתר צריך לבקש הרשאה ולקבל אותה לפני שהוא יכול לשלוח התראות.הפונקציה
requestPermissionהיא stub:// Use the Notification API to request permission to send notifications. function requestPermission() { console.log('TODO: Implement requestPermission()'); }תטמיעו את הפונקציה הזו בשלב הבא.
הפונקציה
sendNotificationהיא stub:// Use the Notification constructor to create and send a new Notification. function sendNotification() { console.log('TODO: Implement sendNotification()'); }תטמיעו את הפונקציה הזו אחרי שתטמיעו את
requestPermission.הפונקציה
window.onloadשל מאזין האירועים קוראת לפונקציהshowPermissionבטעינת הדף, ומציגה את מצב ההרשאה הנוכחי במסוף ובדף:window.onload = () => { showPermission(); };
בקשת הרשאה לשליחת התראות
בשלב הזה, מוסיפים פונקציונליות לבקשת הרשאה מהמשתמש לשליחת התראות.
תשתמשו בשיטה Notification.requestPermission() כדי להפעיל חלון קופץ שבו המשתמש מתבקש לאשר או לחסום התראות מהאתר שלכם.
מחליפים את ה-stub של הפונקציה
requestPermissionבקובץ public/index.js בקוד הבא:// Use the Notification API to request permission to send notifications. function requestPermission() { Notification.requestPermission() .then((permission) => { console.log('Promise resolved: ' + permission); showPermission(); }) .catch((error) => { console.log('Promise was rejected'); console.log(error); }); }טוענים מחדש את הכרטיסייה ב-Chrome שבה צופים באפליקציה הפעילה.
בממשק של האפליקציה הפעילה, לוחצים על בקשת הרשאה לשליחת התראות. יופיע חלון קופץ.
המשתמש יכול לבחור אחת משלוש תשובות בחלון הקופץ של ההרשאה.
| תגובת משתמש | מצב ההרשאה לשליחת התראות |
|---|---|
| המשתמש בוחר באפשרות אישור | granted |
| המשתמש בוחר באפשרות חסימה. | denied |
| המשתמש סוגר את החלון הקופץ בלי לבחור אפשרות | default |
אם המשתמש לוחץ על 'אישור':
הערך של
Notification.permissionהואgranted.האתר יוכל להציג התראות.
שיחות עוקבות אל
Notification.requestPermissionיופנו אלgrantedבלי חלון קופץ.
אם המשתמש לוחץ על 'חסימה':
הערך של
Notification.permissionהואdenied.האתר לא יוכל להציג התראות למשתמש.
שיחות עוקבות אל
Notification.requestPermissionיופנו אלdeniedבלי חלון קופץ.
אם המשתמש סוגר את החלון הקופץ:
נותרו עוד
Notification.permissionימים עד סיום המבצעdefault.לא תהיה אפשרות להציג התראות למשתמש באתר.
קריאות חוזרות ל-
Notification.requestPermissionיציגו עוד חלונות קופצים.עם זאת, אם המשתמש ימשיך לסגור את החלונות הקופצים, הדפדפן עשוי לחסום את האתר ולהגדיר את
Notification.permissionלערךdenied. לא יוצגו למשתמש חלונות קופצים של בקשות הרשאה או התראות.בזמן כתיבת המאמר הזה, התנהגות הדפדפן בתגובה לחלונות קופצים של בקשות הרשאה להצגת התראות עדיין עשויה להשתנות. הדרך הכי טובה לטפל בזה היא לבקש תמיד הרשאת שליחת התראות בתגובה לאינטראקציה שהמשתמש יזם, כדי שהוא יצפה לכך וידע מה קורה.
שליחת התראה
בשלב הזה, שולחים התראה למשתמש.
תשתמשו בבונה Notification כדי ליצור התראה חדשה ולנסות להציג אותה.
אם מצב ההרשאה הוא granted, ההתראה תוצג.
מחליפים את ה-stub של הפונקציה
sendNotificationבקובץ index.js בקוד הבא:// Use the Notification constructor to create and send a new Notification. function sendNotification() { let title = 'Test'; let options = { body: 'Test body', // Other options can go here }; console.log('Creating new notification'); let notification = new Notification(title, options); }ה-constructor של
Notificationכולל שני פרמטרים:titleו-options. optionsהוא אובייקט עם מאפיינים שמייצגים הגדרות ויזואליות ונתונים שאפשר לכלול בהתראה. מידע נוסף זמין במסמכי התיעוד של MDN בנושא פרמטרים של התראות.מרעננים את כרטיסיית Chrome שבה צופים באפליקציה בשידור חי ולוחצים על הלחצן שליחת התראה. אמורה להופיע התראה עם הטקסט
Test body.
מה קורה כששולחים התראות בלי לקבל אישור?
בשלב הזה תוסיפו כמה שורות קוד שיאפשרו לכם לראות מה קורה כשמנסים להציג התראה בלי הרשאת המשתמש.
- ב-
public/index.js, בסוף הפונקציהsendNotification, מגדירים את המטפל באירועיםonerrorשל ההתראה החדשה:
// Use the Notification constructor to create and send a new Notification.
function sendNotification() {
let title = 'Test';
let options = {
body: 'Test body',
// Other options can go here
};
console.log('Creating new notification');
let notification = new Notification(title, options);
notification.onerror = (event) => {
console.log('Could not send notification');
console.log(event);
};
}
כדי לראות שגיאה שקשורה להרשאה לשליחת התראות:
לוחצים על סמל הנעילה לצד סרגל כתובות ה-URL ב-Chrome ומאפסים את הגדרת הרשאת ההתראות של האתר לברירת המחדל.
לוחצים על בקשת הרשאה לשליחת התראות, ובחלון הקופץ שמופיע בוחרים באפשרות חסימה.
לוחצים על שליחת התראה ורואים מה קורה. טקסט השגיאה (
Could not send notification) ואובייקט האירוע נרשמים במסוף.
אם רוצים, מאפסים שוב את הרשאות ההתראות של האתר. אתם יכולים לנסות לבקש הרשאה ולסגור את החלון הקופץ כמה פעמים כדי לראות מה קורה.
ניסוי עם אפשרויות להתראות
עכשיו אתם יודעים את היסודות של בקשת הרשאה ושליחת התראות. ראיתם גם איזו השפעה יש לתגובות המשתמשים על היכולת של האפליקציה להציג התראות.
עכשיו אפשר להתנסות באפשרויות הרבות של נתונים ורכיבים חזותיים שזמינות כשיוצרים התראה. בהמשך מפורטות כל האפשרויות הזמינות. (מידע נוסף על האפשרויות האלה זמין במאמרי העזרה בנושא התראות ב-MDN).
חשוב לדעת שהדפדפנים והמכשירים מטמיעים את האפשרויות האלה בצורה שונה, לכן כדאי לבדוק את ההתראות בפלטפורמות שונות כדי לראות איך הן נראות.
let options = {
dir: 'auto', // Text direction
lang: 'en-US', // A language tag
badge: '/orange-cat.png', // Display when insufficient room
body: 'Hello World', // Body text
tag: 'mytag', // Tag for categorization
icon: '/line-cat.png', // To display in the notification
image: '/orange-cat.png', // To display in the notification
data: { // Arbitrary data; any data type
cheese: 'I like cheese',
pizza: 'Excellent cheese delivery mechanism',
arbitrary: {
faveNumber: 42,
myBool: true
}},
vibrate: [200, 100, 200], // Vibration pattern for hardware
renotify: false, // Notify if replaced? Default false
requireInteraction: false,// Active until click? Default false
/*
actions: // Array of NotificationActions
// Only usable with a service worker
[{
action: 'shop',
title: 'Shop!',
icon: '/bags.png'
},],
*/
}
אפשר לקבל עוד רעיונות במחולל ההתראות של פיטר בברלו.
כדאי לעיין ב-Codelab הבא בסדרה הזו, טיפול בהתראות באמצעות Service Worker, כדי לקבל מידע נוסף.