65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
| <!doctype html>
 | |
| <html lang="en">
 | |
| <head>
 | |
|   <meta charset="utf-8">
 | |
|   <title>Webpush Golang Example</title>
 | |
| </head>
 | |
| <body>
 | |
|   <script>
 | |
|     function publishSubscription(subscription) {
 | |
|       console.log(JSON.stringify(subscription));
 | |
|       var subID = localStorage.getItem('subID');
 | |
|       if(!subID){
 | |
|         fetch("/api/v1/push/subscribe", {method: 'POST', body: JSON.stringify(subscription)})
 | |
|           .then(response => response.json())
 | |
|           .then(data => {
 | |
|               localStorage.setItem('subID', data);
 | |
|               console.log("subcripe", data);
 | |
|               subID = data;
 | |
|           })
 | |
|       } else {
 | |
|         console.log("found subscription:", subID);
 | |
|       }
 | |
|     }
 | |
|     function subscribe(vapidPublicKey) {
 | |
|       navigator.serviceWorker.ready
 | |
|         .then(function(registration) {
 | |
|           return registration.pushManager.subscribe({
 | |
|             userVisibleOnly: true,
 | |
|             applicationServerKey: urlBase64ToUint8Array(vapidPublicKey),
 | |
|           });
 | |
|         })
 | |
|         .then(publishSubscription)
 | |
|         .catch(err => console.error(err));
 | |
|     }
 | |
| 
 | |
|     function urlBase64ToUint8Array(base64String) {
 | |
|       const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
 | |
|       const base64 = (base64String + padding)
 | |
|         .replace(/\-/g, '+')
 | |
|         .replace(/_/g, '/');
 | |
|       const rawData = window.atob(base64);
 | |
|       return Uint8Array.from([...rawData].map(char => char.charCodeAt(0)));
 | |
|     }
 | |
| 
 | |
|     function setup(statusData) {
 | |
|       if ('serviceWorker' in navigator) {
 | |
|         navigator.serviceWorker.register('/service-worker.js');
 | |
|         navigator.serviceWorker.ready
 | |
|           .then(function(registration) {
 | |
|             return registration.pushManager.getSubscription();
 | |
|           })
 | |
|           .then(function(subscription) {
 | |
|             if (!subscription) {
 | |
|               subscribe(statusData.vapid_public_key);
 | |
|             } else {
 | |
|               publishSubscription(subscription);
 | |
|             }
 | |
|         });
 | |
|       }
 | |
|     }
 | |
|   </script>
 | |
|    <script src="/api/v1/status?callback=setup"></script> 
 | |
| </body>
 | |
| </html>
 |