web-dev-qa-db-fra.com

Notification Web Push: Comment utiliser Web Push PHP Library?

Je veux ajouter une notification Web à mon site Web. J'ai cherché sur Google et trouvé des tutoriels à ce sujet. Comme décrit dans ces tutoriels, je parviens à montrer la boîte d'abonnement aux visiteurs et je peux également stocker leurs données.

Main.js

'use strict';

const applicationServerPublicKey = 'BBw_opB12mBhg66Dc94m7pOlTTHb5oqFAafbhN-BNeazWk8woAcSeHdgbmQaroCYssUkqFfoHqEJyCKw';

const pushButton = document.querySelector('.js-Push-btn');

let isSubscribed = false;
let swRegistration = null;

function urlB64ToUint8Array(base64String) {
  const padding = '='.repeat((4 - base64String.length % 4) % 4);
  const base64 = (base64String + padding)
    .replace(/\-/g, '+')
    .replace(/_/g, '/');

  const rawData = window.atob(base64);
  const outputArray = new Uint8Array(rawData.length);

  for (let i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }
  return outputArray;
}



if ('serviceWorker' in navigator && 'PushManager' in window) {
  console.log('Service Worker and Push is supported');

  navigator.serviceWorker.register('sw.js')
  .then(function(swReg) {
    console.log('Service Worker is registered', swReg);

    swRegistration = swReg;
  })
  .catch(function(error) {
    console.error('Service Worker Error', error);
  });
} else {
  console.warn('Push messaging is not supported');
  pushButton.textContent = 'Push Not Supported';
}


function initialiseUI() {
  // Set the initial subscription value
  swRegistration.pushManager.getSubscription()
  .then(function(subscription) {
    isSubscribed = !(subscription === null);

    if (isSubscribed) {
      console.log('User IS subscribed.');
    } else {
      console.log('User is NOT subscribed.');
    }

    updateBtn();
  });
}

function updateBtn() {
  if (isSubscribed) {
    pushButton.textContent = 'Disable Push Messaging';
  } else {
    pushButton.textContent = 'Enable Push Messaging';
  }

  pushButton.disabled = false;
}

sw.js

'use strict';

self.addEventListener('Push', function(event) {
  console.log('[Service Worker] Push Received.');
  console.log(`[Service Worker] Push had this data: "${event.data.text()}"`);

  const title = 'Motoroids Lab';
  const options = { 
    body: 'Motoroids',
    icon: 'images/icon.png',
    badge: 'images/badge.png'
  };

  event.waitUntil(self.registration.showNotification(title, options));
});


self.addEventListener('notificationclick', function(event) {
  console.log('[Service Worker] Notification click Received.');

  event.notification.close();

  event.waitUntil(
    clients.openWindow('https://developers.google.com/web/')
  );
});

Mais maintenant je suis coincé. Peu importe combien j'essaye, il est difficile de comprendre comment envoyer des messages Push depuis mon serveur :(

J'ai activé SSL sur mon serveur. J'ai installé PHP Bibliothèque Web Push et ses dépendances sur le serveur en utilisant composer require minishlink/web-Push commande.

Mais quelle est la prochaine étape? Je ne peux pas comprendre leur documentation aussi. https://github.com/web-Push-libs/web-Push-php

J'ai besoin d'un peu d'aide par ici. Veuillez m'aider à comprendre comment cela fonctionne et comment.

Je vous remercie

11
Rocky Sena

Jetez un œil à https://web-Push-book.gauntface.com/ pour une introduction générale à Web Push. Le chapitre Comment fonctionne Push et Abonnement d'un utilisateur devrait être particulièrement intéressant pour vous. En résumé:

  • Côté client, vous devez créer un abonnement en appelant pushManager.subscribe. Plus d'infos ici .
  • Vous devez envoyer cet abonnement à votre serveur. Par exemple, faites une demande AJAX pour envoyer l'abonnement (endpoint, keys.p256dh, keys.auth) au serveur. Plus d'infos ici .
  • Sur le serveur, vous envoyez un message Push à l'aide de la bibliothèque PHP Web Push. Tout d'abord, vous devez configurer cette bibliothèque avec votre paire de clés. Ensuite, vous devez utiliser l'abonnement (endpoint, keys.p256dh , keys.auth) pour envoyer un message Push. Plus d'infos ici .
13
Martijn