Je lisais depuis quelques heures à propos de API de notification push et API de notification Web . J'ai également découvert que Google & Apple fournit un service de notification Push gratuitement via GCM et APNS, respectivement.
J'essaie de comprendre si nous pouvons implémenter la notification Push pour les navigateurs à l'aide de Desktop Notification, ce que je pense, c'est ce que fait l'API de notification Web. J'ai vu une documentation de Google sur la façon dont cela peut être fait pour Chrome ici & ici .
Maintenant, ce que je ne comprends toujours pas, c'est:
Je crois que toutes ces réponses dans une réponse peuvent aider beaucoup de gens qui ont des confusions similaires.
Donc ici je réponds à ma propre question. J'ai obtenu des réponses à toutes mes questions de personnes ayant déjà construit des services de notification Push.
Mise à jour (mai 2018): voici a un document complet et très bien écrit sur la notification Web push de Google.
Réponse aux questions initiales posées il y a 3 ans:
- Pouvons-nous utiliser GCM/APNS pour envoyer une notification Push à tous les navigateurs Web, y compris Firefox et Safari?
Réponse: Google a déconseillé d'utiliser GCM en avril 2018. Vous pouvez désormais utiliser Messagerie Firebase Cloud (FCM). Cela prend en charge toutes les plateformes, y compris les navigateurs Web.
- Si ce n'est pas via GCM, pouvons-nous avoir notre propre back-end pour faire de même?
Réponse: Oui, la notification push peut être envoyée à partir de notre propre back-end. La prise en charge de la même chose est arrivée à tous les principaux navigateurs.
Vérifiez ce code de Google pour mieux comprendre la mise en œuvre.
Implémentation de son propre backend dans divers langages de programmation. :(
Lectures supplémentaires:
Existe-t-il des services gratuits permettant de faire de même? Certaines entreprises proposent une solution similaire dans les modèles gratuits, freemium et payants. En énumère quelques-uns ci-dessous:
Remarque: Lorsque vous choisissez un service gratuit, n'oubliez pas de lire le TOS. Les services gratuits fonctionnent souvent en collectant des données utilisateur à des fins diverses, notamment d'analyse.
En dehors de cela, vous devez disposer du protocole HTTPS pour envoyer des notifications Push. Cependant, vous pouvez obtenir gratuitement https via letsencrypt.org
Javier a couvert les notifications et les limitations actuelles.
Ma suggestion: window.postMessage
pendant que nous attendons que le navigateur handicapé rattrape son retard, sinon Worker.postMessage()
fonctionne toujours avec des travailleurs Web.
Il peut s'agir de l'option de secours avec le gestionnaire d'affichage des messages de la boîte de dialogue, en cas d'échec du test de la fonctionnalité de notification ou du refus de l'autorisation.
Notification de has-feature et de refus d'autorisation:
if (!("Notification" in window) || (Notification.permission === "denied") ) {
// use (window||Worker).postMessage() fallback ...
}
Vous pouvez envoyer des données du serveur au navigateur via événements côté serveur . Il s'agit essentiellement d'un flux unidirectionnel auquel un client peut "s'abonner" à partir d'un navigateur. À partir de là, vous pouvez simplement créer de nouveaux objets Notification
sous forme de flux SSE dans le navigateur:
var source = new EventSource('/events');
source.on('message', message => {
var notification = new Notification(message.title, {
body: message.body
});
});
Un peu vieux, mais cet article d'Eric Bidelman explique les bases de SSE et fournit également quelques exemples de code serveur.
GCM/APNS ne concernent que Chrome et Safari, respectivement.
Je pense que vous cherchez peut-être Notification
:
https://developer.mozilla.org/en-US/docs/Web/API/notification
Je suppose que vous parlez de réels notifications qui peuvent être envoyées même lorsque l'utilisateur ne surfe pas sur votre site Web (sinon, consultez WebSockets ou des méthodes héritées telles que la longue interrogation).
Pouvons-nous utiliser GCM/APNS pour envoyer une notification Push à tous les navigateurs Web, y compris Firefox et Safari?
GCM est uniquement pour Chrome et APNs uniquement pour Safari. Chaque fabricant de navigateurs propose son propre service.
Si ce n'est pas via GCM, pouvons-nous avoir notre propre back-end pour faire de même?
L'API Push nécessite deux moteurs ! L'un est proposé par le fabricant du navigateur et est responsable de l'envoi de la notification à l'appareil. L’autre doit être à vous (ou vous pouvez utiliser un service tiers tel que Pushpad ) et est chargé de déclencher la notification et de contacter le service du fabricant du navigateur (par exemple, GCM, APNs, Mozilla Push serveurs ).
Divulgation: Je suis le fondateur de Pushpad
Puis-je redéfinir votre question comme ci-dessous
Pouvons-nous avoir notre propre back-end pour envoyer une notification Push à Chrome, Firefox, Opera & Safari?
Oui. Pour aujourd'hui (2017/05) , vous pouvez utiliser la même implémentation côté client et côté serveur pour gérer Chrome, Firefox et Opera (pas de Safari). Parce qu'ils ont implémenté les notifications Web de la même manière. C’est le protocole Push API du W3C. Mais Safari a sa propre vieille architecture. Nous devons donc maintenir Safari séparément.
Reportez-vous à navigateur-Push repo pour que les lignes directrices implémentent la notification Web Push pour votre application Web avec votre propre back-end. Il explique avec des exemples comment vous pouvez ajouter une prise en charge des notifications Web Push pour votre application Web sans services tiers.
À partir de maintenant, GCM ne fonctionne que pour chrome et Android. De même, Firefox et d'autres navigateurs ont leur propre api.
Nous en venons maintenant à la question de savoir comment mettre en œuvre la notification Push afin qu’elle fonctionne pour tous les navigateurs courants dotés de leur propre serveur.
2.après avoir obtenu un terminal utilisant Ajax, enregistrez-le avec le nom du navigateur.
3.Vous devez créer un back-end comportant des champs pour le titre, le message, l'icône, puis sur l'URL selon vos besoins. Maintenant, après avoir cliqué sur envoyer une notification, appelez une fonction comme send_Push (). Dans ce code d'écriture pour différents navigateurs par exemple
3.1. pour chrome
$headers = array(
'Authorization: key='.$api_key(your gcm key),
'Content-Type: application/json',
);
$msg = array('to'=>'register id saved to your server');
$url = 'https://Android.googleapis.com/gcm/send';
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($msg));
$result = curl_exec($ch);
3.2. pour mozilla
$headers = array(
'Content-Type: application/json',
'TTL':6000
);
$url = 'https://updates.Push.services.mozilla.com/wpush/v1/REGISTER_ID_TO SEND NOTIFICATION_ON';
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
pour les autres navigateurs s'il vous plaît google ...
c'est un moyen simple de faire une notification Push pour tous les navigateurs https://pushjs.org
Push.create("Hello world!", {
body: "How's it hangin'?",
icon: '/icon.png',
timeout: 4000,
onClick: function () {
window.focus();
this.close();
}
});
Je suggère d'utiliser pubnub. J'ai essayé d'utiliser ServiceWorkers et PushNotification à partir du navigateur, cependant, lorsque j'ai essayé, les vues Web ne le prenaient pas en charge.
https://www.pubnub.com/docs/web-javascript/pubnub-javascript-sdk