SlideShare a Scribd company logo
1 of 22
Download to read offline
WEB PUSH
NOTIFICATIONS
DONE RIGHT
Maxim Salnikov
@webmaxru
What is web push
and how to start using it the right way
Maxim Salnikov
• Developer Engagement Lead at Microsoft
• Web Platform tech speaker, writer, trainer
TWITTER: @WEBMAXRU GITHUB: @WEBMAXRU SETTINGS
webmax.ru
Icon Title Body Actions Image
Why Push Notifications?
• Delivered regardless of app/browser state
• High opt-in (79.5%) and direct open (5%) rates*
• Delivery channel is free and reliable
• Rich format capabilities for better engagement
• Easy and fast to set up and start sending
*Data: Airship 2023 Push Notification Benchmarks, median for Android
Milestones
2000
Push Service in
Blackberry –
instant
notification
about a new
email received
2009
Apple Push
Notification
Service on iOS
3.0
Google’s
Android Cloud
To Device
Messaging
2013
Google Cloud
Messaging for
Chrome Apps
and Extensions
APNS for Safari
on OS X 10.9
2015
Web Push API in
Chrome 42
Web Push API in
Firefox 44
Windows
Notification
Service extended
2023
In production on
all major
platforms – after
iOS 16.4 and
Safari on macOS
13 joined.
https://caniuse.com/push-api
80%
of the users
Availability
Web Push prerequisites
• Notifications API and Web Push API are available
• Service Worker is registered and active
• Valid code for the “push” event
• Notifications are allowed for the origin and browser
• On iOS: app is added to the Home Screen
• Device is online
Subscription
User’s device
Backend
2. pushManager.subscribe()
3. pushSubscription {}
"pushSubscription": {
"endpoint": "https://...",
"keys": {
"p256dh": "BKfnjyWE...",
"auth": "iklyQDz..."
}
}
web.push.apple.com
fcm.googleapis.com
push.services.mozilla.com
notify.windows.com
Messaging service
VAPID public key
VAPID private key
Sending notification
User’s device
Backend
Messaging service
2. “push” event to SW + payload
addEventListener('push', (event) => {
showNotification(payload);
});
npm install web-push
'notificationclick'
'notificationclose'
LET’S SUBSCRIBE
Notification permission request -> Subscribing -> Saving subscription
9/3/20XX
Politeness is a must
• Consider alternatives first
• Initiate subscription flow only after explicit user action
• Show pre-request UI with a content and frequency explained
• Confirm by UI that unsubscribing is possible at any time
• Separate notification permission request and subscription
Requesting permission
Notification.requestPermission().then((result) => {
if (result !== 'granted') {
// Plan B on convincing user needed
} else {
// OK to proceed with subscription
}
});
Subscribing
navigator.serviceWorker.getRegistration().then((registration) =>
{
registration.pushManager
.subscribe({
userVisibleOnly: true,
applicationServerKey: VAPID_PUBLIC_KEY,
})
.then((pushSubscription) => {
// Send pushSubscription to the backend. Add context.
});
});
TIME TO PUSH!
Call messaging service -> Process “push” event -> Process actions
9/3/20XX
Notification object
{
"title": "Push.Foo Notification Title",
"actions": [
{
"action": "open_project_repo",
"title": "Show source code"
}
],
"body": "Test notification body",
"image": "https://push.foo/images/social.png",
"icon": "https://push.foo/images/logo.jpg",
"badge": "https://push.foo/images/logo-mask.png",
"requireInteraction": "true",
"tag": "tag"
}
Your best notification
• Transactional, not promotional
• Timely, personal, relevant
• Contains information itself, not just “click to see”
• Contains call-to-action
• Does not repeat itself
• Use emoji🤷
Your OSL->LHR flight✈️
Click here to check-in
fooairline.com
FooAirline ltd.
Online check-in is available
fooairline.com
You can use “push” event to
• Fetch extra data from the backend to use in the notification
• Message a client – for example, to update app UI or icon via
Badging API
• Gather analytics
• Call self.registration.showNotification() – it’s the
only required action
In the service worker
self.addEventListener('push', (event) => {
notification = event.data.json();
const showNotificationPromise = self.registration.showNotification(
notificationData.title,
notificationData
);
const promiseChain = Promise.allSettled([
messageClientPromise,
showNotificationPromise,
]);
event.waitUntil(promiseChain);
});
Use “notificationclick” to
• Open a browser or installed app
• Focus an existing tab with the app
• Use feature detection to check if multiple actions are
available
if ('actions' in window.Notification?.prototype) {}
• Attach analytics code
Summary
• Web Push feature is very
powerful for the businesses and
convenient for the users
• Currently available on all major
platforms
• To keep it relevant, it’s
important to avoid misusing
• Services like OneSignal, Pusher,
Airship etc. can help with a
backend component (and not
only)
IMAGE: PUSH NOTIFICATIONS UI KIT BY ONESIGNAL
Instant Web Push
notification test
- Playground for the Web Push API
- Entire flow from requesting permission to
sending the notification
- Sending to multiple devices
- Specifications, API references, guides + this
deck
HTTPS://PUSH.FOO
LET’S CONNECT
AND CHAT
Maxim Salnikov
salnikov@gmail.com
@webmaxru

More Related Content

What's hot

Rit 8.5.0 integration testing training student's guide
Rit 8.5.0 integration testing training student's guideRit 8.5.0 integration testing training student's guide
Rit 8.5.0 integration testing training student's guide
Darrel Rader
 
LangChain Intro by KeyMate.AI
LangChain Intro by KeyMate.AILangChain Intro by KeyMate.AI
LangChain Intro by KeyMate.AI
OzgurOscarOzkan
 
Chatbot Artificial Intelligence
Chatbot Artificial IntelligenceChatbot Artificial Intelligence
Chatbot Artificial Intelligence
Md. Mahedi Mahfuj
 

What's hot (20)

A Comprehensive Review of Large Language Models for.pptx
A Comprehensive Review of Large Language Models for.pptxA Comprehensive Review of Large Language Models for.pptx
A Comprehensive Review of Large Language Models for.pptx
 
Prompt Engineering
Prompt EngineeringPrompt Engineering
Prompt Engineering
 
ChatGPT General Meeting
ChatGPT General MeetingChatGPT General Meeting
ChatGPT General Meeting
 
Introduction to Kubernetes and Google Container Engine (GKE)
Introduction to Kubernetes and Google Container Engine (GKE)Introduction to Kubernetes and Google Container Engine (GKE)
Introduction to Kubernetes and Google Container Engine (GKE)
 
Rit 8.5.0 integration testing training student's guide
Rit 8.5.0 integration testing training student's guideRit 8.5.0 integration testing training student's guide
Rit 8.5.0 integration testing training student's guide
 
How Azure helps to build better business processes and customer experiences w...
How Azure helps to build better business processes and customer experiences w...How Azure helps to build better business processes and customer experiences w...
How Azure helps to build better business processes and customer experiences w...
 
Integrating Apache Kafka Into Your Environment
Integrating Apache Kafka Into Your EnvironmentIntegrating Apache Kafka Into Your Environment
Integrating Apache Kafka Into Your Environment
 
LangChain Intro by KeyMate.AI
LangChain Intro by KeyMate.AILangChain Intro by KeyMate.AI
LangChain Intro by KeyMate.AI
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Using the power of OpenAI with your own data: what's possible and how to start?
Using the power of OpenAI with your own data: what's possible and how to start?Using the power of OpenAI with your own data: what's possible and how to start?
Using the power of OpenAI with your own data: what's possible and how to start?
 
Chatbot and Virtual AI Assistant Implementation in Natural Language Processing
Chatbot and Virtual AI Assistant Implementation in Natural Language Processing Chatbot and Virtual AI Assistant Implementation in Natural Language Processing
Chatbot and Virtual AI Assistant Implementation in Natural Language Processing
 
Karpenter
KarpenterKarpenter
Karpenter
 
UNLEASHING INNOVATION Exploring Generative AI in the Enterprise.pdf
UNLEASHING INNOVATION Exploring Generative AI in the Enterprise.pdfUNLEASHING INNOVATION Exploring Generative AI in the Enterprise.pdf
UNLEASHING INNOVATION Exploring Generative AI in the Enterprise.pdf
 
Generative AI
Generative AIGenerative AI
Generative AI
 
OpenShift 4 installation
OpenShift 4 installationOpenShift 4 installation
OpenShift 4 installation
 
Chatbot Abstract
Chatbot AbstractChatbot Abstract
Chatbot Abstract
 
OpenShift-Technical-Overview.pdf
OpenShift-Technical-Overview.pdfOpenShift-Technical-Overview.pdf
OpenShift-Technical-Overview.pdf
 
The Full Stack Web Development
The Full Stack Web DevelopmentThe Full Stack Web Development
The Full Stack Web Development
 
Chatbot Artificial Intelligence
Chatbot Artificial IntelligenceChatbot Artificial Intelligence
Chatbot Artificial Intelligence
 
Online Quiz System Project Report
Online Quiz System Project Report Online Quiz System Project Report
Online Quiz System Project Report
 

Similar to Web Push Notifications done right

A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
DataLeader.io
 
Google external login setup in ASP (1).pdf
Google external login setup in ASP  (1).pdfGoogle external login setup in ASP  (1).pdf
Google external login setup in ASP (1).pdf
findandsolve .com
 
App engine devfest_mexico_10
App engine devfest_mexico_10App engine devfest_mexico_10
App engine devfest_mexico_10
Chris Schalk
 

Similar to Web Push Notifications done right (20)

Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd
Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd
Sencha Roadshow 2017: Build Progressive Web Apps with Ext JS and Cmd
 
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
A Microsoft Silverlight User Group Starter Kit Made Available for Everyone to...
 
Building an Appier Web - London Web Standards - Nov 2016
Building an Appier Web -  London Web Standards - Nov 2016Building an Appier Web -  London Web Standards - Nov 2016
Building an Appier Web - London Web Standards - Nov 2016
 
Building an Appier Web - Velocity Amsterdam 2016
Building an Appier Web - Velocity Amsterdam 2016Building an Appier Web - Velocity Amsterdam 2016
Building an Appier Web - Velocity Amsterdam 2016
 
Windows Phone 7 Unleashed Session 2
Windows Phone 7 Unleashed Session 2Windows Phone 7 Unleashed Session 2
Windows Phone 7 Unleashed Session 2
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Research Inventy : International Journal of Engineering and Science
Research Inventy : International Journal of Engineering and ScienceResearch Inventy : International Journal of Engineering and Science
Research Inventy : International Journal of Engineering and Science
 
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
 
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
 
Windows Azure: Connecting the Dots for a Mobile Workforce
Windows Azure: Connecting the Dots for a Mobile WorkforceWindows Azure: Connecting the Dots for a Mobile Workforce
Windows Azure: Connecting the Dots for a Mobile Workforce
 
Azure Mobile Service - Techdays 2014
Azure Mobile Service - Techdays 2014Azure Mobile Service - Techdays 2014
Azure Mobile Service - Techdays 2014
 
Building Messenger Bots
Building Messenger BotsBuilding Messenger Bots
Building Messenger Bots
 
Google external login setup in ASP (1).pdf
Google external login setup in ASP  (1).pdfGoogle external login setup in ASP  (1).pdf
Google external login setup in ASP (1).pdf
 
Bootstrapping an App for Launch
Bootstrapping an App for LaunchBootstrapping an App for Launch
Bootstrapping an App for Launch
 
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
SPS Utah - Everything your need to know about the Microsoft Graph as a ShareP...
 
Building Offline Ready and Installable Web App
Building Offline Ready and Installable Web AppBuilding Offline Ready and Installable Web App
Building Offline Ready and Installable Web App
 
Mobile March Windows Azure Notification Hubs
Mobile March Windows Azure Notification HubsMobile March Windows Azure Notification Hubs
Mobile March Windows Azure Notification Hubs
 
Progressive Web Apps 101
Progressive Web Apps 101Progressive Web Apps 101
Progressive Web Apps 101
 
Progressive Web Apps with LitHTML (BucharestJS Meetup)
Progressive Web Apps with LitHTML (BucharestJS Meetup)Progressive Web Apps with LitHTML (BucharestJS Meetup)
Progressive Web Apps with LitHTML (BucharestJS Meetup)
 
App engine devfest_mexico_10
App engine devfest_mexico_10App engine devfest_mexico_10
App engine devfest_mexico_10
 

More from Maxim Salnikov

[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
Maxim Salnikov
 
[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт
[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт
[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт
Maxim Salnikov
 

More from Maxim Salnikov (14)

If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...
If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...
If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...
 
Building Generative AI-infused apps: what's possible and how to start
Building Generative AI-infused apps: what's possible and how to startBuilding Generative AI-infused apps: what's possible and how to start
Building Generative AI-infused apps: what's possible and how to start
 
Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?
 
ChatGPT and not only: how can you use the power of Generative AI at scale
ChatGPT and not only: how can you use the power of Generative AI at scaleChatGPT and not only: how can you use the power of Generative AI at scale
ChatGPT and not only: how can you use the power of Generative AI at scale
 
If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...
If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...
If your code could speak, what would it tell you? Let GitHub Copilot Chat hel...
 
Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?
 
ChatGPT and not only: How to use the power of GPT-X models at scale
ChatGPT and not only: How to use the power of GPT-X models at scaleChatGPT and not only: How to use the power of GPT-X models at scale
ChatGPT and not only: How to use the power of GPT-X models at scale
 
Using the power of Generative AI at scale
Using the power of Generative AI at scaleUsing the power of Generative AI at scale
Using the power of Generative AI at scale
 
The Status of Angular v13
The Status of Angular v13The Status of Angular v13
The Status of Angular v13
 
Azure cloud for the web frontend developers
Azure cloud for the web frontend developersAzure cloud for the web frontend developers
Azure cloud for the web frontend developers
 
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
 
[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт
[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт
[Russian] Прогрессивные веб-приложения: по-настоящему кросс-платформенный опыт
 
Securing Connected Cars Requires Digital Identity
Securing Connected Cars Requires Digital IdentitySecuring Connected Cars Requires Digital Identity
Securing Connected Cars Requires Digital Identity
 
How to Make Your IoT Devices Secure, Act Autonomously & Trusted Subjects
How to Make Your IoT Devices Secure, Act Autonomously & Trusted SubjectsHow to Make Your IoT Devices Secure, Act Autonomously & Trusted Subjects
How to Make Your IoT Devices Secure, Act Autonomously & Trusted Subjects
 

Recently uploaded

CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Recently uploaded (20)

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 

Web Push Notifications done right

  • 2. What is web push and how to start using it the right way
  • 3. Maxim Salnikov • Developer Engagement Lead at Microsoft • Web Platform tech speaker, writer, trainer TWITTER: @WEBMAXRU GITHUB: @WEBMAXRU SETTINGS webmax.ru Icon Title Body Actions Image
  • 4. Why Push Notifications? • Delivered regardless of app/browser state • High opt-in (79.5%) and direct open (5%) rates* • Delivery channel is free and reliable • Rich format capabilities for better engagement • Easy and fast to set up and start sending *Data: Airship 2023 Push Notification Benchmarks, median for Android
  • 5. Milestones 2000 Push Service in Blackberry – instant notification about a new email received 2009 Apple Push Notification Service on iOS 3.0 Google’s Android Cloud To Device Messaging 2013 Google Cloud Messaging for Chrome Apps and Extensions APNS for Safari on OS X 10.9 2015 Web Push API in Chrome 42 Web Push API in Firefox 44 Windows Notification Service extended 2023 In production on all major platforms – after iOS 16.4 and Safari on macOS 13 joined.
  • 7. Web Push prerequisites • Notifications API and Web Push API are available • Service Worker is registered and active • Valid code for the “push” event • Notifications are allowed for the origin and browser • On iOS: app is added to the Home Screen • Device is online
  • 8. Subscription User’s device Backend 2. pushManager.subscribe() 3. pushSubscription {} "pushSubscription": { "endpoint": "https://...", "keys": { "p256dh": "BKfnjyWE...", "auth": "iklyQDz..." } } web.push.apple.com fcm.googleapis.com push.services.mozilla.com notify.windows.com Messaging service VAPID public key VAPID private key
  • 9. Sending notification User’s device Backend Messaging service 2. “push” event to SW + payload addEventListener('push', (event) => { showNotification(payload); }); npm install web-push 'notificationclick' 'notificationclose'
  • 10. LET’S SUBSCRIBE Notification permission request -> Subscribing -> Saving subscription 9/3/20XX
  • 11. Politeness is a must • Consider alternatives first • Initiate subscription flow only after explicit user action • Show pre-request UI with a content and frequency explained • Confirm by UI that unsubscribing is possible at any time • Separate notification permission request and subscription
  • 12. Requesting permission Notification.requestPermission().then((result) => { if (result !== 'granted') { // Plan B on convincing user needed } else { // OK to proceed with subscription } });
  • 13. Subscribing navigator.serviceWorker.getRegistration().then((registration) => { registration.pushManager .subscribe({ userVisibleOnly: true, applicationServerKey: VAPID_PUBLIC_KEY, }) .then((pushSubscription) => { // Send pushSubscription to the backend. Add context. }); });
  • 14. TIME TO PUSH! Call messaging service -> Process “push” event -> Process actions 9/3/20XX
  • 15. Notification object { "title": "Push.Foo Notification Title", "actions": [ { "action": "open_project_repo", "title": "Show source code" } ], "body": "Test notification body", "image": "https://push.foo/images/social.png", "icon": "https://push.foo/images/logo.jpg", "badge": "https://push.foo/images/logo-mask.png", "requireInteraction": "true", "tag": "tag" }
  • 16. Your best notification • Transactional, not promotional • Timely, personal, relevant • Contains information itself, not just “click to see” • Contains call-to-action • Does not repeat itself • Use emoji🤷 Your OSL->LHR flight✈️ Click here to check-in fooairline.com FooAirline ltd. Online check-in is available fooairline.com
  • 17. You can use “push” event to • Fetch extra data from the backend to use in the notification • Message a client – for example, to update app UI or icon via Badging API • Gather analytics • Call self.registration.showNotification() – it’s the only required action
  • 18. In the service worker self.addEventListener('push', (event) => { notification = event.data.json(); const showNotificationPromise = self.registration.showNotification( notificationData.title, notificationData ); const promiseChain = Promise.allSettled([ messageClientPromise, showNotificationPromise, ]); event.waitUntil(promiseChain); });
  • 19. Use “notificationclick” to • Open a browser or installed app • Focus an existing tab with the app • Use feature detection to check if multiple actions are available if ('actions' in window.Notification?.prototype) {} • Attach analytics code
  • 20. Summary • Web Push feature is very powerful for the businesses and convenient for the users • Currently available on all major platforms • To keep it relevant, it’s important to avoid misusing • Services like OneSignal, Pusher, Airship etc. can help with a backend component (and not only) IMAGE: PUSH NOTIFICATIONS UI KIT BY ONESIGNAL
  • 21. Instant Web Push notification test - Playground for the Web Push API - Entire flow from requesting permission to sending the notification - Sending to multiple devices - Specifications, API references, guides + this deck HTTPS://PUSH.FOO
  • 22. LET’S CONNECT AND CHAT Maxim Salnikov salnikov@gmail.com @webmaxru