Skip to content

Commit b79fd69

Browse files
committed
feat: improve client example
1 parent 19e15eb commit b79fd69

File tree

2 files changed

+56
-30
lines changed

2 files changed

+56
-30
lines changed

example/index.html

+17-13
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,28 @@
22
<html lang="en">
33
<head>
44
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
56
<title>Web Push Elixir</title>
67
<link rel="icon" type="image/x-icon" href="favicon.ico" />
78
<link rel="manifest" href="app.webmanifest">
8-
<style>
9-
.container {
10-
display: flex;
11-
flex-direction: column;
12-
align-items: center;
13-
justify-content: center;
14-
height: 100vh;
15-
}
16-
</style>
9+
<script src="https://cdn.tailwindcss.com"></script>
1710
</head>
1811
<body>
19-
<div class="container">
20-
<h1>Web Push Elixir</h1>
21-
<button>Test Notification</button>
22-
</div>
12+
<main class="min-h-screen grid min-h-full place-items-center bg-white px-6 py-24 sm:py-32 lg:px-8">
13+
<div class="text-center">
14+
<p class="text-base font-semibold text-red-600">Web Push Elixir</p>
15+
<h1 class="mt-4 text-3xl font-bold tracking-tight text-gray-900 sm:text-5xl">Client Subscription</h1>
16+
<p class="mt-6 text-base leading-7 text-gray-600">Example client subscription for push notifications</p>
17+
<div class="mt-10 flex items-center justify-center gap-x-6">
18+
<button id="request" type="button" class="rounded-md bg-red-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600">Request Permission</button>
19+
<button id="subscribe" type="button" class="text-sm font-semibold text-gray-900">Subscribe Client</button>
20+
</div>
21+
</div>
22+
23+
<div class="relative block w-full md:w-1/2 bg-gray-200 p-12 text-center">
24+
<div id="message" class="mt-2 block text-sm text-gray-600 break-all"></div>
25+
</div>
26+
</main>
2327
<script src="main.js"></script>
2428
</body>
2529
</html>

example/main.js

+39-17
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,51 @@
1+
const message = document.getElementById('message')
2+
13
navigator.serviceWorker
24
.register(`${ window.location.pathname }service-worker.js`)
35
.then(registration => {
4-
console.log('Service worker successfully registered.');
6+
message.innerHTML += '<p>Service worker successfully registered</p>'
57
})
68
.catch(err => {
7-
console.error('Unable to register service worker.', err);
8-
});
9-
10-
const button = document.querySelector('button');
9+
message.innerHTML += `<p>Unable to register service worker - ${err}</p>`
10+
})
1111

12-
button.addEventListener('click', event => {
12+
const request = document.getElementById('request')
13+
const subscribe = document.getElementById('subscribe')
1314

15+
request.addEventListener('click', event => {
1416
Notification.requestPermission()
1517
.then(permission => {
18+
message.innerHTML += `<p>Permission ${permission}</p>`
19+
})
20+
});
1621

17-
navigator.serviceWorker.ready.then(registration => {
18-
19-
console.log('Service worker is active');
22+
subscribe.addEventListener('click', event => {
23+
navigator.serviceWorker.ready
24+
.then(registration => {
2025

21-
registration.pushManager.subscribe({
22-
userVisibleOnly: true,
23-
applicationServerKey: 'some_public_key'
24-
}).then(pushSubscription => {
25-
console.log('Received PushSubscription: ', JSON.stringify(pushSubscription));
26-
});
27-
});
26+
registration.pushManager.subscribe({
27+
userVisibleOnly: true,
28+
applicationServerKey: 'BDntLA3k5K1tsrFOXXAuS_9Ey30jxy-R2CAosC2DOQnTs8LpQGxpTEx3AcPXinVYFFpJI6tT_RJC8pHgUsdbhOk'
2829
})
29-
});
30+
.then(pushSubscription => {
31+
message.innerHTML += `<p>Received PushSubscription:</p>`
32+
message.innerHTML += `<p>${JSON.stringify(pushSubscription)}</p>`
33+
})
34+
.catch(err => {
35+
registration.pushManager.getSubscription().then(subscription => {
36+
if (subscription !== null) {
37+
subscription
38+
.unsubscribe()
39+
.then(successful => {
40+
message.innerHTML += '<p>Unsubscribed from existing subscription, please subscribe again</p>'
41+
})
42+
.catch(err => {
43+
message.innerHTML += `<p>Failed to unsubscribe from existing subscription - ${err}</p>`
44+
})
45+
} else {
46+
message.innerHTML += '<p>No subscription found</p>'
47+
}
48+
})
49+
})
50+
})
51+
})

0 commit comments

Comments
 (0)