[ã¢ããã€ã¹ãèªã]ãµã€ã¯ã«ã®ä»ã®19ã®éšå æ¬æ¥ãWebãã¯ãããžãŒãšJavaScriptã®äœ¿çšã«é¢ããäžé£ã®èšäºã®ç¬¬9éšã®ç¿»èš³ãå
¬éããŸãã ãã®èšäºã§ã¯ãWebããã·ã¥éç¥ã«ã€ããŠèª¬æããŸãã ã€ãŸãããããã®åºç€ãšãªãã¡ã«ããºã ãããã³éç¥ã®ãµãã¹ã¯ãªãã·ã§ã³ãå®è¡ãããæ¹æ³ãéç¥ã®éåä¿¡ããã»ã¹ãã©ã®ããã«é
眮ããããã«ã€ããŠèª¬æããŸãã
å€ãã®éçºè
ã䜿çšãããæ©èœã®1ã€ã§ãããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®äžçã§ã¯éåžžã«äžè¬çãªããã·ã¥éç¥ãããªãé
ããŠWebã«å±ããŸããã
埩ç¿
ããã§èª¬æããŠãããã¯ãããžãŒã䜿çšãããšããŠãŒã¶ãŒã¯ãæ°ããçŽ æã®åºçŸããŸãã¯èå³ã®ããã€ãã³ãã®çºçã«ã€ããŠãµãã¹ã¯ã©ã€ããŒã«éç¥ããããšãç®çãšããWebã¢ããªã±ãŒã·ã§ã³ã®å®æçãªéç¥ããµãã¹ã¯ã©ã€ãã§ããŸãã WebãªãœãŒã¹èªäœã®èŠ³ç¹ãããããã¯ãããã·ã¥éç¥ã«ãµãã¹ã¯ã©ã€ããããŠãŒã¶ãŒããã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããæåŸ
ããçç±ãšæ©äŒãããããšãæå³ããŸãã
ããã·ã¥éç¥ãæäŸããã¡ã«ããºã ã®1ã€ã¯ã
ãµãŒãã¹ã¯ãŒã«ãŒã§ãã ããã·ã¥éç¥ãåŠçãããµãŒãã¹ã¯ãŒã«ãŒã¯ãç¹å®ã®ãµãŒãã¹ã¯ãŒã«ãŒãæ
åœããæ°ããéç¥ããã©ãŠã¶ã«å°çãããšãã«ã®ã¿ã³ãŒããå®è¡ããããããã·ã¹ãã ãªãœãŒã¹ãçµæžçã«æ¶è²»ããŸãã
ããã·ã¥APIãšéç¥API
ããã§ãWebããã·ã¥éç¥ããšåŒã¶ãã®ã¯ãå®éã«ã¯2ã€ã®ãã¯ãããžãŒã§è¡šãããŸãã ããã¯ããµãŒããŒãService Workerã«ã¡ãã»ãŒãžãéä¿¡ãããšãã«äœ¿çšããã
Push APIãšãService WorkerãŸãã¯Webã¢ããªã±ãŒã·ã§ã³èªäœã®ã¹ã¯ãªããããŠãŒã¶ãŒã«éç¥ã衚瀺ãããšãã«äœ¿çšããã
Notifications APIã§ãã
ããã·ã¥API
ããã·ã¥éç¥ã¡ã«ããºã ãå®è£
ããã«ã¯ã次ã®3ã€ã®æé ãå®è¡ããå¿
èŠããããŸãã
- ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®æºåã ãã®ã¹ãããã§ã¯ããŠãŒã¶ãŒãéç¥ããµãã¹ã¯ã©ã€ãã§ããã¡ã«ããºã ãæºåããŸãã
- ããã·ã¥ã¡ãã»ãŒãžãéä¿¡ããŸãã ãã®ã¹ãããã§ã¯ãWebã¢ããªã±ãŒã·ã§ã³éçºè
ã®ãµãŒããŒã§ã察å¿ããAPIã«ã¢ã¯ã»ã¹ããŸããããã«ããããŠãŒã¶ãŒã®ããã€ã¹ã«éç¥ãéä¿¡ãããŸãã
- ããã·ã¥ã¡ãã»ãŒãžãåä¿¡ããŸãã ãã®ã¹ãããã§ã¯ãããã·ã¥ã¡ãã»ãŒãžã¯ãã©ãŠã¶ã«é
ä¿¡ãããåŸã«åŠçãããŸãã
ããããã¹ãŠè©³çŽ°ã«æ€èšããŠãã ããã
ãã©ãŠã¶ã®æ©èœã確èªãã
ãŸããçŸåšã®ãã©ãŠã¶ãããã·ã¥éç¥ããµããŒãããŠãããã©ããã確èªããå¿
èŠããããŸãã ããã¯ã次ã®ãã§ãã¯ãå®è¡ããããšã§å®è¡ã§ããŸãã
navigator
ãªããžã§ã¯ãã§serviceWorker
ã確èªããŸããwindow
ãªããžã§ã¯ãå
ã®PushManager
ã®ååšã確èªããŸãã
ããã¯æ¬¡ã®ãããªãã®ã§ãã
if (!('serviceWorker' in navigator)) { // -. return; } if (!('PushManager' in window)) { // push-. return; }
ãŠãŒã¶ãŒã®ãã©ãŠã¶ãŒãWebããã·ã¥éç¥ã®æäœã«å¿
èŠãªãã¯ãããžãŒããµããŒãããŠããªãå ŽåããŠãŒã¶ãŒã«ãããã®ãµãã¹ã¯ã©ã€ããç³ãåºãŠãæå³ããããŸããã
ãµãŒãã¹ã¯ãŒã«ãŒç»é²
ãã©ãŠã¶ã確èªããåŸãå¿
èŠãªãã®ããµããŒãããŠããããšãå€æããå Žåã¯ãService Workerã®ç»é²ã«é²ãããšãã§ããŸãã ãããè¡ãæ¹æ³
ã«ã€ããŠã¯ãã§ã«èª¬æããŸããã
ãŠãŒã¶ãŒèš±å¯ã®ååŸ
Service Workerã®ç»é²åŸããŠãŒã¶ãŒãéç¥ã«ãµãã¹ã¯ã©ã€ãããããã»ã¹ãéå§ã§ããŸãã ãããè¡ãã«ã¯ããŠãŒã¶ãŒããããã·ã¥ã¡ãã»ãŒãžãéä¿¡ããèš±å¯ãååŸããå¿
èŠããããŸãã
èš±å¯APIã¯æ¯èŒçåçŽã§ãã 泚æããå¿
èŠãããã®ã¯ã
ãã®APIã® 2ã€ã®ããŒãžã§ã³
ã䜿çšãããããšã ãã§ãã
以åã®ããŒãžã§ã³ã§ã¯ãã³ãŒã«ããã¯é¢æ°ãåãå
¥ããŠããŸããããçŸåšã§ã¯ãããã¹ãè¿ããŸãã çŸåšã®ãã©ãŠã¶ã«å®è£
ãããŠããAPIã®ããŒãžã§ã³ãäºåã«ç¥ãããšã¯ã§ããªãããããããåé¡ã®åå ã§ãã ãããã£ãŠããããã®ã¢ãããŒãã®äž¡æ¹ããµããŒãããå¿
èŠããããŸãã
次ã®ããã«ãªããŸãã
function requestPermission() { return new Promise(function(resolve, reject) { const permissionResult = Notification.requestPermission(function(result) { // . resolve(result); }); if (permissionResult) { permissionResult.then(resolve, reject); } }) .then(function(permissionResult) { if (permissionResult !== 'granted') { throw new Error('Permission not granted.'); } }); }
Notification.requestPermission()
ãåŒã³åºããšã次ã®ãŠã£ã³ããŠã衚瀺ãããŸãã
éç¥ã衚瀺ããèš±å¯ããªã¯ãšã¹ããããŠãŒã¶ãŒã
Allow
ãã¿ã³ãã¯ãªãã¯ããŠ
Block
ãããããŠã£ã³ããŠãéããããšã§èš±å¯ãªã¯ãšã¹ãã«å¿çãããšãçµæãè¡ãšããŠååŸãããŸãããŠãŒã¶ãŒã®éžæã«å¿ããŠã
'granted'
ã
'denied'
ããŸãã¯
'default'
ã
ãŠãŒã¶ãŒã[
Block
]ãã¿ã³ãã¯ãªãã¯ãããšãã¢ããªã±ãŒã·ã§ã³ã¯ãéç¥ã衚瀺ããèš±å¯ãåå¥ã«ãããã¯è§£é€ããããŸã§ãŠãŒã¶ãŒã«èŠæ±ã§ããªããªããŸãã ãããè¡ãã«ã¯ããŠãŒã¶ãŒã¯ãã©ãŠã¶ã®èšå®ã詳ãã調ã¹ãå¿
èŠããããŸãã
PushManagerã䜿çšãããŠãŒã¶ãŒãµãã¹ã¯ãªãã·ã§ã³
ãµãŒãã¹ã¯ãŒã«ãŒãç»é²ããéç¥ã衚瀺ãããŠãŒã¶ãŒèš±å¯ãåãåãå¯èœæ§ã確信ããåŸããµãŒãã¹ã¯ãŒã«ãŒã®
registration.pushManager.subscribe()
ã¡ãœãããåŒã³åºãããšã§ãµãã¹ã¯ã©ã€ãã§ããŸãã
ãµãŒãã¹ã¯ãŒã«ãŒã®ç»é²ãå«ãããã¹ãŠã®å€èŠ³ã¯æ¬¡ã®ãšããã§ãã
function subscribeUserToPush() { return navigator.serviceWorker.register('service-worker.js') .then(function(registration) { var subscribeOptions = { userVisibleOnly: true, applicationServerKey: btoa( 'BEl62iUYgUivxIkv69yViEuiBIa-Ib9-SkvMeAtA3LFgDzkrxZJjSgSnfckjBJuBkr3qBUYIHBQFLXYp5Nksh8U' ) }; return registration.pushManager.subscribe(subscribeOptions); }) .then(function(pushSubscription) { console.log('PushSubscription: ', JSON.stringify(pushSubscription)); return pushSubscription; }); }
registration.pushManager.subscribe(options)
ã¡ãœããã¯ãããã€ãã®ãã©ã¡ãŒã¿ãŒãå«ã
options
ãªããžã§ã¯ããåãå
¥ããŸãããã®ããã€ãã¯ãªãã·ã§ã³ã§ãã
userVisibleOnly
ã ãã®è«çå€ã¯ãçæããããµãã¹ã¯ãªãã·ã§ã³ãã¡ãã»ãŒãžã®è¡šç€ºã®ã¿ã«äœ¿çšãããããšã瀺ããŸãã ãã®ãã©ã¡ãŒã¿ãŒã¯true
ã«èšå®ããå¿
èŠããããŸããèšå®ããªããšãšã©ãŒãçºçããŸãïŒããã«ã¯æŽå²çãªçç±ããããŸãïŒãapplicationServerKey
ã ããã¯ãBase64ã§ãšã³ã³ãŒããããDOMString
ããŸãã¯ããã·ã¥ãµãŒããŒãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®èªèšŒã«äœ¿çšããå
¬éããŒãå«ãArrayBuffer
ãªããžã§ã¯ãã§ãã
Webã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã¯ããµãŒããŒã«åºæã®ã¢ããªã±ãŒã·ã§ã³ããŒã®ãã¢ãçæããå¿
èŠããããŸãïŒVAPIDããŒãšãåŒã°ããŸãïŒã ãã®ãã¢ã«ã¯å
¬ééµãšç§å¯éµãå«ãŸããŸãã ãµãŒããŒã¯ç§å¯éµãç§å¯ã«ä¿ã¡ãå
¬ééµãã¯ã©ã€ã¢ã³ãã«è»¢éããŸãã ããŒã«ãããããã·ã¥éç¥ãµãŒãã¹ã¯ãã©ã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããŠãŒã¶ãŒã«ãµã€ã³ã¢ããããããèªèããç¹å®ã®ãŠãŒã¶ãŒã«éç¥ãéä¿¡ãããµãŒããŒãšåããµãŒããŒã§ããããšã確èªã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ããŒãã¢ã¯ãäžåºŠã ãäœæããå¿
èŠããããŸãã ããŒãçæããã«ã¯ã
ãã¡ããã芧ãã ãã ã
ãã©ãŠã¶ãŒã¯ããµãã¹ã¯ãªãã·ã§ã³ããã»ã¹äžã«
applicationServerKey
ïŒå
¬éããŒïŒãããã·ã¥ãµãŒãã¹ã«æž¡ããŸãã ããã¯ãããã·ã¥ãµãŒãã¹ãã¢ããªã±ãŒã·ã§ã³ã®å
¬éããŒããµãã¹ã¯ãªãã·ã§ã³
PushSubscription
ã«é¢é£ä»ããããšãã§ããããšãæå³ããŸãã
ããã§äœãèµ·ãããã§ãïŒ
- Webã¢ããªã±ãŒã·ã§ã³ã¯ããµãŒããŒããŒãæž¡ããŠ
subscribe()
ããŒãããŠåŒã³åºããŸãã
- ãã©ãŠã¶ãŒã¯ãããã·ã¥ãµãŒãã¹ã«å¯ŸããŠãããã¯ãŒã¯èŠæ±ãè¡ããŸããããã·ã¥ãµãŒãã¹ã¯ãç¬èªã®APIãžã®ãšã³ããªãã€ã³ãã®ã¢ãã¬ã¹ãçæãããã®ã¢ãã¬ã¹ãããŒã«é¢é£ä»ããŠããã©ãŠã¶ãŒã«é¢ããæ
å ±ãè¿ããŸãã
- ãã©ãŠã¶ã¯ããã®æ
å ±ã
PushSubscription
ãªããžã§ã¯ãã«è¿œå ããŸãããã®ãªããžã§ã¯ãã¯ã subscribe()
promiseãéããŠè¿ãããŸãã
åŸã§ãããã·ã¥éç¥ãéä¿¡ããå Žåãã¢ããªã±ãŒã·ã§ã³ã®ãã©ã€ããŒããµãŒããŒããŒã§çœ²åãããæ
å ±ãå«ã
Authorization
ããããŒãäœæããå¿
èŠããããŸãã ããã·ã¥ãµãŒãã¹ãéç¥ãéä¿¡ããèŠæ±ãåä¿¡ãããšãäžèšã®ããã»ã¹ã®2çªç®ã®ã¹ãããã§APIãšã³ããªãã€ã³ãã«æ¢ã«é¢é£ä»ããããŠããå
¬éããŒã䜿çšããŠããããŒã確èªããŸãã
PushSubscriptionãªããžã§ã¯ã
PushSubscription
ãªããžã§ã¯ãã«ã¯ããŠãŒã¶ãŒã®ããã€ã¹ã«ããã·ã¥éç¥ãéä¿¡ããããã«å¿
èŠãªãã¹ãŠã®æ
å ±ãå«ãŸããŠããŸãã ããã¯æ¬¡ã®ãããªãã®ã§ãã
{ "endpoint": "https://domain.pushservice.com/some-id", "keys": { "p256dh": "BIPUL12DLfytvTajnryr3PJdAgXS3HGMlLqndGcJGabyhHheJYlNGCeXl1dn18gSJ1WArAPIxr4gK0_dQds4yiI=", "auth":"FPssMOQPmLmXWmdSTdbKVw==" } }
endpoint
ããããã£ã¯ãããã·ã¥éç¥ãµãŒãã¹URLãAPIãžã®ãšã³ããªãã€ã³ãã§ãã éç¥ãéä¿¡ããã«ã¯ããã®URLã§POSTãªã¯ãšã¹ããå®è¡ããå¿
èŠããããŸãã
keys
ãªããžã§ã¯ãã«ã¯ãããã·ã¥éç¥ã§éä¿¡ãããã¡ãã»ãŒãžããŒã¿ã®æå·åã«äœ¿çšãããæ
å ±ãå«ãŸããŠããŸãã
ãŠãŒã¶ãŒãéç¥ããµãã¹ã¯ã©ã€ããã
PushSubscription
ãªããžã§ã¯ããããå ŽåãããããµãŒããŒã«éä¿¡ããå¿
èŠããããŸãã ãµãŒããŒã§ã¯ããã®ãªããžã§ã¯ãã®å
容ã¯ãããšãã°ããŒã¿ããŒã¹ã«ä¿åããå¿
èŠããããä»åŸã¯ãã®æ
å ±ã䜿çšããŠãããã·ã¥éç¥ã察å¿ãããŠãŒã¶ãŒã«éä¿¡ã§ããŸãã
èš±å¯ãååŸããPushSubscriptionãªããžã§ã¯ããäœæããŠãµãŒããŒã«éä¿¡ããããã·ã¥ã¡ãã»ãŒãžãéä¿¡ãã
ãŠãŒã¶ãŒã«ããã·ã¥ã¡ãã»ãŒãžãéä¿¡ããå Žåãéä¿¡ããããŒã¿ãéä¿¡å
ãã¡ãã»ãŒãžã«é¢ããè¿œå æ
å ±ã«ã€ããŠãããã·ã¥ãµãŒãã¹ã«ïŒé©åãªAPIã¡ãœãããåŒã³åºããŠïŒéç¥ããå¿
èŠããããŸãã ãã®åŒã³åºãã¯éåžžãWebã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããè¡ãããŸãã
ããã·ã¥ãµãŒãã¹
ããã·ã¥ãµãŒãã¹ã¯ãããã·ã¥éç¥ãéä¿¡ããèŠæ±ãåä¿¡ãããããããã§ãã¯ããŠãé©åãªãã©ãŠã¶ãŒã«éç¥ãé
ä¿¡ããã·ã¹ãã ã§ãã
ããã·ã¥ãµãŒãã¹ã¯ãWebã¢ããªã±ãŒã·ã§ã³éçºè
ã管çããŠããªããµãŒãããŒãã£ã®ãµãŒãã¹ã§ããããšã«æ³šæããŠãã ããã ãµãŒããŒã¯ãAPIãä»ããŠããã·ã¥ãµãŒãã¹ãšããåããããµãŒããŒã§ãã ããã·ã¥ãµãŒãã¹ã®äŸã¯
Google FCMã§ãã
ããã·ã¥ãµãŒãã¹ã¯ãå€ãã®è€éãªã¿ã¹ã¯ãåŠçããŸãã ããšãã°ããã©ãŠã¶ããªãã©ã€ã³ã®å Žåãããã·ã¥ãµãŒãã¹ã¯ã¡ãã»ãŒãžããã¥ãŒã«å
¥ããã¡ãã»ãŒãžãéä¿¡ããããŸã§ã¡ãã»ãŒãžãéä¿¡ããããŸã§åŸ
æ©ããŸãã
åãã©ãŠã¶ãŒã¯ä»»æã®ããã·ã¥ãµãŒãã¹ã䜿çšã§ããŸãããWebã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ããã·ã¥ãµãŒãã¹ã®éžæã«åœ±é¿ããŸããã ãã ãããã¹ãŠã®ããã·ã¥ãµãŒãã¹ã¯åãAPIã䜿çšããŠããããããããã®ãµãŒãã¹ã®å€æ§æ§ã«ãã£ãŠããã·ã¥éç¥ã¡ã«ããºã ã®å®è£
ã«åé¡ãçããããšã¯ãããŸããã ããã·ã¥ã¡ãã»ãŒãžãéä¿¡ããèŠæ±ãåŠçããURLãååŸããã«ã¯ã
PushSubscription
ãªããžã§ã¯ãã®
endpoint
ãã©ã¡ãŒã¿ãŒã®ä»¥åã«ä¿åãããå€ãåç
§ããå¿
èŠããããŸãã
ããã·ã¥ãµãŒãã¹API
ããã·ã¥ãµãŒãã¹APIã¯ããŠãŒã¶ãŒã«ã¡ãã»ãŒãžãéä¿¡ããããã®ããŒã«ãæäŸããŸãã ããã¯ã
Web Push Protocolã§è¡šãããŸããããã¯ãããã·ã¥ãµãŒãã¹ãæäœããæé ãå®çŸ©ããIETFæšæºã§ãã
ããã·ã¥ã¡ãã»ãŒãžã§éä¿¡ãããããŒã¿ã¯æå·åããå¿
èŠããããŸãã ãã®ãããéçºè
ã¯ããã·ã¥ãµãŒãã¹ããŠãŒã¶ãŒã«éä¿¡ãããããŒã¿ã衚瀺ããããšãèš±å¯ããŸããã 䜿çšããããã·ã¥ãµãŒãã¹ã決å®ããã®ã¯ãã©ãŠã¶ãŒã§ãããããããã¯éèŠã§ãïŒããã·ã¥ãµãŒãã¹ãååã«å®å
šã§ãªãå¯èœæ§ããããŸãïŒã
次ã®ããããã£ã¯ãããã·ã¥ã¡ãã»ãŒãžããšã«èšå®ãããŸãã
TTL
æªé
ä¿¡ã®ããã·ã¥éç¥ãåé€ãããåã«ãã¥ãŒã§è²»ããããšãã§ããæéã決å®ããŸãã
Priority
-ã¡ãã»ãŒãžã®åªå
床ãèšå®ããŸããããã«ããããŠãŒã¶ãŒã®ããã€ã¹ã®ããããªãŒé»åãç¯çŽããå¿
èŠãããå Žåã«ãããã·ã¥ãµãŒãã¹ã¯åªå
床ã®é«ãã¡ãã»ãŒãžã®ã¿ãéä¿¡ã§ããŸãã
Topic
-ããã·ã¥éç¥ã«ãããã¯åãå²ãåœãŠãŸããããã«ãããåããããã¯ã§é
ä¿¡ãåŸ
æ©ããŠããã¡ãã»ãŒãžã眮ãæããããŸãã ãã®çµæããŠãŒã¶ãŒã®ããã€ã¹ãã¢ã¯ãã£ãã«ãªããšããã«ããŠãŒã¶ãŒã¯ææ°ã®ã¡ãã»ãŒãžãåãåããŸãã
Webã¢ããªã±ãŒã·ã§ã³éçºè
ãµãŒããŒãããã·ã¥ãµãŒããŒãããã³ã¡ãã»ãŒãžã®å°çå
ã®ãã©ãŠã¶ãŒãã©ãŠã¶ããã·ã¥ã€ãã³ã
ã¡ãã»ãŒãžãããã·ã¥ãµãŒãã¹ã«éä¿¡ããããšããã«ã次ã®ããããã®ã€ãã³ããçºçãããŸã§åŸ
æ©ç¶æ
ã«ãªããŸãã
- ããã€ã¹ã¯ãªã³ã©ã€ã³ã§ãã
- TTLãã©ã¡ãŒã¿ãŒã§æå®ãããã¡ãã»ãŒãžä¿ææéãåããŸããã
ããã·ã¥ãµãŒãã¹ãã¡ãã»ãŒãžãé
ä¿¡ãããšããã©ãŠã¶ãŒã¯ãããåä¿¡ãã解èªãã以åã«ç»é²ããããµãŒãã¹ã¯ãŒã«ãŒã§ããã·ã¥ã€ãã³ããããªã¬ãŒããŸãã
æãèå³æ·±ãã®ã¯ã察å¿ããWebããŒãžãéããŠããªããŠãããã©ãŠã¶ãŒããµãŒãã¹ã¯ãŒã«ãŒãåŒã³åºãããšãã§ããããšã§ãã ããã§æ¬¡ã®ããšãèµ·ãããŸãã
- ããã·ã¥éç¥ããã©ãŠã¶ã«å±ãããã©ãŠã¶ã¯ããã解èªããŸãã
- ãã©ãŠã¶ã¯Service Workerãã¢ã¯ãã£ãã«ããŸãã
- ããã·ã¥ã€ãã³ãã¯ãµãŒãã¹ã¯ãŒã«ãŒã«ãã£ã¹ããããããŸãã
ããã·ã¥ã€ãã³ããã³ãã©ãŒã®æ§æã«äœ¿çšãããã³ãŒãã¯ãä»ã®JavaScriptã€ãã³ããã³ãã©ãŒã®ã³ãŒãã®ããã«èŠããŸãã
self.addEventListener('push', function(event) { if (event.data) { console.log('This push event has data: ', event.data.text()); } else { console.log('This push event has no data.'); } });
ãµãŒãã¹ã¯ãŒã«ãŒã®æ©èœã«ã€ããŠèª¬æããå ŽåããµãŒãã¹ã¯ãŒã«ãŒãã¢ã¯ãã£ãã«ããã¿ã€ãã³ã°ãšåæ¢ããã¿ã€ãã³ã°ã決å®ããã®ã¯ãã©ãŠã¶ãŒã§ãããããéçºè
ã¯ãµãŒãã¹ã¯ãŒã«ãŒã®å®è¡æéãæå°éã®ã¬ãã«ã§å¶åŸ¡ã§ããããšã«æ³šæããŠãã ããã
ãµãŒãã¹ã¯ãŒã«ãŒ
event.waitUntil(promise)
ã®æ§ç¯ã¯ã
event.waitUntil(promise)
解決ããåã«ããµãŒãã¹ã¯ãŒã«ãŒãéç¥ã®åŠçã§ããžãŒã§ããããã©ãŠã¶ãŒããã®äœæ¥ãå®äºããåã«ãµãŒãã¹ã¯ãŒã«ãŒãã·ã£ããããŠã³ããŠã¯ãªããªãããšããã©ãŠã¶ã«äŒããŸãã
ããã·ã¥ã€ãã³ããåŠçããããã®ãµã³ãã«ã³ãŒãã次ã«ç€ºããŸãã
self.addEventListener('push', function(event) { var promise = self.registration.showNotification('Push notification!'); event.waitUntil(promise); });
self.registration.showNotification()
åŒã³åºãã¯ããŠãŒã¶ãŒãèŠãããšãã§ããéç¥ãå°ããŸãããã®åŒã³åºãã¯ãéç¥ã衚瀺ããããšããã«è§£æ±ºãããçŽæãè¿ããŸãã
showNotification(title, options)
ã¡ãœããã䜿çšãããšãéçºè
ã®ããŒãºã«å¿ããŠéç¥ã®å€èŠ³ãã«ã¹ã¿ãã€ãºã§ããŸãã ãããã£ãŠã
title
ãã©ã¡ãŒã¿ãŒã¯æååã§ããã
options
ãã©ã¡ãŒã¿ãŒã¯æ¬¡ã®å
容ã®ãªããžã§ã¯ãã§ãã
{ "//": "Visual Options", "body": "<String>", "icon": "<URL String>", "image": "<URL String>", "badge": "<URL String>", "vibrate": "<Array of Integers>", "sound": "<URL String>", "dir": "<String of 'auto' | 'ltr' | 'rtl'>", "//": "Behavioural Options", "tag": "<String>", "data": "<Anything>", "requireInteraction": "<boolean>", "renotify": "<Boolean>", "silent": "<Boolean>", "//": "Both Visual & Behavioural Options", "actions": "<Array of Strings>", "//": "Information Option. No visual affect.", "timestamp": "<Long>" }
ããã§ã¯ãéç¥ã®å€èŠ³ã®ã«ã¹ã¿ãã€ãºã«ã€ããŠè©³ããèªãããšãã§ããŸãã
ãŸãšã
ããã·ã¥éç¥ã¯ã䜿çšããããªãœãŒã¹ãšãããã®ãªãœãŒã¹ã®ãŠãŒã¶ãŒã®äž¡æ¹ã«å©çãããããããšãã§ããŸãã ãããããWebãªãœãŒã¹ã®ææè
ãèŠããŠããã¹ãäž»ãªããšã¯ãããã·ã¥éç¥ã«ã¯ãŠãŒã¶ãŒã«ãšã£ãŠæ¬åœã«èå³æ·±ãå¿
èŠãªãã®ãå«ãŸããŠããããšã§ãã
ãã®èšäºã®èè
ã¯ã圌ã®äŒç€Ÿã§ãã
SessionStack㯠ãããã·ã¥éç¥ã䜿çšããŠããããžã§ã¯ãã®ã¯ã©ãã·ã¥ãåé¡ããŸãã¯ç°åžžããŠãŒã¶ãŒã«éç¥ããããšãèšç»ããŠãããšè¿°ã¹ãŠããŸãã ããã«ãããç·æ¥äºæ
ã«ã€ããŠå³åº§ã«åŠç¿ããé©åãªå¯Ÿçãè¬ããããšãã§ããŸãã
äžé£ã®èšäºã®åã®éšåïŒ
ããŒã1ïŒ
JSã®ä»çµã¿ïŒãšã³ãžã³ãã©ã³ã¿ã€ã ã¡ã«ããºã ãã³ãŒã«ã¹ã¿ãã¯ã®æŠèŠããŒã2ïŒ
JSã®ä»çµã¿ïŒV8å
éšãšã³ãŒãã®æé©åã«ã€ããŠããŒã3ïŒ
JSã®ä»çµã¿ïŒã¡ã¢ãªç®¡çã4çš®é¡ã®ã¡ã¢ãªãªãŒã¯ãããã³ããããšã®æŠãããŒã4ïŒ
JSã®ä»çµã¿ïŒã€ãã³ãã«ãŒããéåæãããã³async / awaitã䜿çšããŠã³ãŒããæ¹åãã5ã€ã®æ¹æ³ããŒã5ïŒ
JSã®ä»çµã¿ïŒWebSocketãšHTTP / 2 + SSEã äœãéžã¶ïŒããŒã6ïŒ
JSã®ä»çµã¿ïŒWebAssemblyã®æ©èœãšç¯å²ããŒã7ïŒ
JSã®ä»çµã¿ïŒWeb Workersãš5ã€ã®äœ¿çšã·ããªãªããŒã8ïŒ
JSã®ä»çµã¿ïŒãµãŒãã¹ã¯ãŒã«ãŒèŠªæãªãèªè
ïŒ ãããžã§ã¯ãã§ããã·ã¥éç¥ã䜿çšããŠããŸããïŒ