Cet atelier de programmation vous explique pas à pas comment créer un client de notifications push. À la fin de l'atelier de programmation, vous aurez un client qui:
- Abonne l'utilisateur aux notifications push.
- Reçoit des messages push et les affiche sous forme de notifications.
- Désabonne l'utilisateur des notifications push.
L'objectif de cet atelier de programmation est de vous aider à apprendre par la pratique. beaucoup parler de concepts. Départ Comment fonctionnent les notifications push ? pour en savoir plus sur les concepts liés aux notifications push.
Le code serveur de cet atelier de programmation est déjà terminé. Vous ne pourrez pour implémenter le client dans cet atelier de programmation. Pour apprendre à mettre en œuvre un serveur de notifications push, consultez Atelier de programmation: Créer une notification push Google Cloud.
Consultez push-notifications-client-codelab-complete. (source). pour voir le code complet.
Compatibilité du navigateur
Cet atelier de programmation fonctionne avec les combinaisons de système d'exploitation et de navigateur suivantes:
- Windows: Chrome, Edge
- macOS: Chrome, Firefox
- Android: Chrome, Firefox
Cet atelier de programmation ne fonctionne pas avec les systèmes d'exploitation suivants (ou une combinaison de système d'exploitation et de navigateur):
- macOS: Brave, Edge, Safari
- iOS
Configuration
Obtenir une copie modifiable du code
L'éditeur de code affiché à droite de ces instructions s'appellera l'UI de Glitch tout au long de cet atelier de programmation.
- Cliquez sur Remix to Edit (Remixer pour modifier) pour pouvoir modifier le projet.
Configurer l'authentification
Pour que les notifications push fonctionnent, vous devez configurer votre serveur et votre client à l'aide de clés d'authentification. Consultez Signer vos requêtes de protocole Web push. pour en savoir plus.
- Dans l'interface utilisateur de Glitch, cliquez sur Tools (Outils), puis sur Terminal pour ouvrir le terminal Glitch.
- Dans le terminal Glitch, exécutez
npx web-push generate-vapid-keys
. Copier la clé privée et les valeurs des clés publiques. - Dans l'interface utilisateur de Glitch, ouvrez
.env
, puis mettez à jourVAPID_PUBLIC_KEY
etVAPID_PRIVATE_KEY
. Définir DeVAPID_SUBJECT
àmailto:test@test.test
. Toutes ces valeurs doivent être encapsulées entre guillemets. Une fois vos modifications effectuées, le fichier.env
doit se présenter comme suit : semblable à celle-ci:
VAPID_PUBLIC_KEY="BKiwTvD9HA…"
VAPID_PRIVATE_KEY="4mXG9jBUaU…"
VAPID_SUBJECT="mailto:test@test.test"
- Fermez le terminal Glitch.
- Ouvrez
public/index.js
. - Remplacez
VAPID_PUBLIC_KEY_VALUE_HERE
par la valeur de votre clé publique.
Enregistrer un service worker
Votre client aura besoin d'un service worker pour la réception et l'affichage les notifications. Il est préférable d'enregistrer le service worker le plus tôt possible. Reportez-vous à la section Recevoir et afficher les messages envoyés en tant que Notifications pour plus de contexte.
- Remplacez le commentaire
// TODO add startup logic here
par le code suivant:
// TODO add startup logic here
if ('serviceWorker' in navigator && 'PushManager' in window) {
navigator.serviceWorker.register('./service-worker.js').then(serviceWorkerRegistration => {
console.info('Service worker was registered.');
console.info({serviceWorkerRegistration});
}).catch(error => {
console.error('An error occurred while registering the service worker.');
console.error(error);
});
subscribeButton.disabled = false;
} else {
console.error('Browser does not support service workers or push messages.');
}
subscribeButton.addEventListener('click', subscribeButtonHandler);
unsubscribeButton.addEventListener('click', unsubscribeButtonHandler);
- Pour prévisualiser le site, appuyez sur Afficher l'application. Appuyez ensuite sur Plein écran
- Appuyez sur Ctrl+Maj+J (ou Cmd+Option+J sur Mac) pour ouvrir les outils de développement.
- Cliquez sur l'onglet Console. Vous devriez voir le message
Service worker was registered.
s'est connecté à la console.
Demander l'autorisation de notification push
Vous ne devez jamais demander l'autorisation d'envoyer des notifications push lors du chargement de la page. Votre interface utilisateur doit plutôt demander à l'utilisateur s'il souhaite recevoir des notifications push. Une fois qu'ils ont explicitement confirmé (par un clic sur un bouton, par exemple), vous pouvez lancer le processus formel d’obtention de l’autorisation de notification push du navigateur.
- Dans l'interface utilisateur de Glitch, cliquez sur View Source (Afficher la source) pour revenir à votre code.
- Dans
public/index.js
, remplacez le commentaire// TODO
danssubscribeButtonHandler()
par le code suivant:
// TODO
// Prevent the user from clicking the subscribe button multiple times.
subscribeButton.disabled = true;
const result = await Notification.requestPermission();
if (result === 'denied') {
console.error('The user explicitly denied the permission request.');
return;
}
if (result === 'granted') {
console.info('The user accepted the permission request.');
}
- Revenez à l'onglet de l'application et cliquez sur S'abonner pour envoyer des notifications push. Votre navigateur ou système d'exploitation vous demandera probablement si vous souhaitez que le site Web vous envoyer des notifications push. Cliquez sur Autoriser (ou toute expression équivalente). votre navigateur ou votre système d'exploitation). Dans la console, vous devriez voir un message indiquant si la demande a été acceptée ou refusée.
S'abonner aux notifications push
Le processus d'abonnement implique l'interaction avec un service Web contrôlé par le fournisseur du navigateur. C'est ce que l'on appelle un service push. Une fois que vous aurez Les informations d'abonnement aux notifications push dont vous avez besoin pour les envoyer à un serveur et faire en sorte que le serveur les stocke dans une base de données à long terme. Consultez la section Abonner le client aux notifications push. pour en savoir plus sur le processus d'abonnement.
- Ajoutez le code en surbrillance suivant à
subscribeButtonHandler()
:
subscribeButton.disabled = true;
const result = await Notification.requestPermission();
if (result === 'denied') {
console.error('The user explicitly denied the permission request.');
return;
}
if (result === 'granted') {
console.info('The user accepted the permission request.');
}
const registration = await navigator.serviceWorker.getRegistration();
const subscribed = await registration.pushManager.getSubscription();
if (subscribed) {
console.info('User is already subscribed.');
notifyMeButton.disabled = false;
unsubscribeButton.disabled = false;
return;
}
const subscription = await registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlB64ToUint8Array(VAPID_PUBLIC_KEY)
});
notifyMeButton.disabled = false;
fetch('/add-subscription', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(subscription)
});
L'option userVisibleOnly
doit être true
. Il est possible qu'un jour
pour envoyer des messages sans afficher de notifications visibles par l'utilisateur
(transferts silencieux), mais les navigateurs ne permettent pas cette fonctionnalité pour le moment.
pour des raisons de confidentialité.
La valeur applicationServerKey
repose sur une fonction utilitaire qui :
Convertit une chaîne base64 en Uint8Array. Cette valeur est utilisée pour
entre votre serveur et le service push.
Se désabonner des notifications push
Une fois qu'un utilisateur s'est abonné aux notifications push, votre interface utilisateur doit proposer un moyen de se désabonner au cas où l'utilisateur change d'avis et ne souhaite plus recevoir de notifications push.
- Remplacer le commentaire
// TODO
dansunsubscribeButtonHandler()
par le code suivant:
// TODO
const registration = await navigator.serviceWorker.getRegistration();
const subscription = await registration.pushManager.getSubscription();
fetch('/remove-subscription', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({endpoint: subscription.endpoint})
});
const unsubscribed = await subscription.unsubscribe();
if (unsubscribed) {
console.info('Successfully unsubscribed from push notifications.');
unsubscribeButton.disabled = true;
subscribeButton.disabled = false;
notifyMeButton.disabled = true;
}
Recevoir un message push et l'afficher sous forme de notification
Comme indiqué précédemment, vous avez besoin d'un service worker pour gérer réception et affichage des messages transmis au client depuis votre serveur. Reportez-vous à la section Recevoir et afficher les messages envoyés en tant que Notifications pour en savoir plus.
- Ouvrez
public/service-worker.js
et remplacez le commentaire// TODO
. dans le gestionnaire d'événementspush
du service worker avec le code suivant:
// TODO
let data = event.data.json();
const image = 'https://cdn.glitch.com/614286c9-b4fc-4303-a6a9-a4cef0601b74%2Flogo.png?v=1605150951230';
const options = {
body: data.options.body,
icon: image
}
self.registration.showNotification(
data.title,
options
);
- Revenez à l'onglet de l'application.
- Cliquez sur M'avertir. Vous devriez recevoir une notification push.
- Essayez d'ouvrir l'URL de l'onglet de votre appli dans d'autres navigateurs (ou même autres appareils), en suivant le workflow d'abonnement, puis cliquez sur Notifier tout. Vous devriez recevoir la même notification push sur tous les navigateurs auxquels vous êtes abonné. Reportez-vous à Compatibilité des navigateurs pour afficher la liste des navigateurs et systèmes d'exploitation des combinaisons de travail dont l'efficacité est connue ou non.
Vous pouvez personnaliser la notification de nombreuses façons. Consultez les paramètres de
ServiceWorkerRegistration.showNotification()
pour en savoir plus
Ouvrir une URL lorsqu'un utilisateur clique sur une notification
Dans la vraie vie, vous utiliserez probablement la notification comme un moyen pour susciter de nouveau l'intérêt des utilisateurs et les inciter à se rendre sur votre site. Pour ce faire, vous devez configurer un peu plus votre service worker.
- Remplacez le commentaire
// TODO
dans le fichiernotificationclick
du service worker. avec le code suivant:
// TODO
event.notification.close();
event.waitUntil(self.clients.openWindow('https://web.dev'));
- Retournez dans l'onglet de l'appli, envoyez-vous une autre notification, puis
cliquez sur la notification. Votre navigateur doit ouvrir un nouvel onglet et se charger
https://web.dev
Étapes suivantes
- Consultez
ServiceWorkerRegistration.showNotification()
. pour découvrir toutes les façons de personnaliser les notifications. - Consultez l'article Présentation des notifications push. pour mieux comprendre les concepts du fonctionnement des notifications push.
- Consultez Atelier de programmation: Créer un serveur de notifications push. pour apprendre à créer un serveur qui gère les abonnements et envoie le protocole Web push requêtes.
- Essayer le Générateur de notifications pour tester toutes les façons de personnaliser les notifications.