Node.js 在使用node js的web技术中,是否可以使用Badge Api进行推送通知?
我们有一个网站,它是一个社交媒体web应用程序。它包含与社交媒体应用程序类似的所有功能。我们需要在主屏幕中显示徽章通知。这是一个web技术应用程序,我们试图找到可能的解决方案,但尚未找到任何解决方案。使用,您可以直接从Node.js应用程序向Chrome发送推送通知。优秀的web推送功能允许您发送推送通知,而无需通过中间服务,如。本文将引导您使用香草JavaScript前端和后端设置web推送通知的“Hello,World”示例。最终结果将如下图所示。此项目的完整来源可在上获得 凭据和服务器设置 为了进行设置,您需要创建一组乏味的关键点。无控制键标识发送推送通知的用户。web推送npm模块可以为您提供支持,因此让我们安装Node.js 在使用node js的web技术中,是否可以使用Badge Api进行推送通知?,node.js,Node.js,我们有一个网站,它是一个社交媒体web应用程序。它包含与社交媒体应用程序类似的所有功能。我们需要在主屏幕中显示徽章通知。这是一个web技术应用程序,我们试图找到可能的解决方案,但尚未找到任何解决方案。使用,您可以直接从Node.js应用程序向Chrome发送推送通知。优秀的web推送功能允许您发送推送通知,而无需通过中间服务,如。本文将引导您使用香草JavaScript前端和后端设置web推送通知的“Hello,World”示例。最终结果将如下图所示。此项目的完整来源可在上获得 凭据和服务器设置
web推送
以及一些其他依赖项,并使用web推送生成无趣键
来创建键
$ npm install express@4.16.3 web-push@3.3.0 body-parser@1.18.2 express-static@1.2.5
+ express@4.16.3
+ web-push@3.3.0
+ body-parser@1.18.2
+ express-static@1.2.5
added 62 packages in 1.42s
$
$ ./node_modules/.bin/web-push generate-vapid-keys
=======================================
Public Key:
BOynOrGhgkj8Bfk4hsFENAQYbnqqLSigUUkCNaBsAmNuH6U9EWywR1JIdxBVQOPDbIuTaj0tVAQbczNLkC5zftw
Private Key:
<OMITTED>
=======================================
$
接下来,将/subscribe
端点添加到您的Express应用程序。浏览器JavaScript将向该端点发送一个HTTP请求,请求正文中有一个PushSubscription
对象。您需要PushSubscription
对象,以便通过webpush.sendNotification()
发送推送通知
这就是服务器端所需的全部内容。您可以在GitHub上找到完整的源代码。现在,您需要创建一个客户端client.js
和一个服务工作者worker.js
客户和服务人员
首先,为了向客户端提供静态资产,请使用express static npm模块将express应用程序配置为提供顶级目录中的静态文件。请确保将此app.use()调用放在/subscribe路由处理程序之后,否则Express将查找subscribe.html文件,而不是使用路由处理程序
app.use(require('express-static')('./'));
接下来,创建一个index.html文件,作为应用程序的入口点。这个文件中唯一重要的部分是拉入客户端JavaScript的标记,其余部分是占位符
<html>
<head>
<title>Push Demo</title>
<script type="application/javascript" src="/client.js"></script>
</head>
<body>
Service Worker Demo
</body>
</html>
最后,您需要实现client.js加载的worker.js文件。这就是您的服务人员逻辑所在的位置。在服务工作者中,当您的订阅收到推送通知时,您会收到一条消息
console.log('Loaded service worker!');
self.addEventListener('push', ev => {
const data = ev.data.json();
console.log('Got push', data);
self.registration.showNotification(data.title, {
body: 'Hello, World!',
icon: 'http://mongoosejs.com/docs/images/mongoose5_62x30_transparent.png'
});
});
就这样!使用正确的环境变量启动服务器:
$ env PUBLIC_VAPID_KEY='OMITTED' env PRIVATE_VAPID_KEY='OMITTED' node .
在Chrome中导航到,您应该会看到下面的推送通知 我不认为这将有助于在node js web app中实现徽章通知。你必须做这些事情。您不能用一行代码或一个小函数设置通知系统。如果你得到一个简短的答案,把答案放在这篇文章里,这样每个人都可以使用它。
// Hard-coded, replace with your public key
const publicVapidKey = 'BOynOrGhgkj8Bfk4hsFENAQYbnqqLSigUUkCNaBsAmNuH6U9EWywR1JIdxBVQOPDbIuTaj0tVAQbczNLkC5zftw';
if ('serviceWorker' in navigator) {
console.log('Registering service worker');
run().catch(error => console.error(error));
}
async function run() {
console.log('Registering service worker');
const registration = await navigator.serviceWorker.
register('/worker.js', {scope: '/'});
console.log('Registered service worker');
console.log('Registering push');
const subscription = await registration.pushManager.
subscribe({
userVisibleOnly: true,
// The `urlBase64ToUint8Array()` function is the same as in
// https://www.npmjs.com/package/web-push#using-vapid-key-for-applicationserverkey
applicationServerKey: urlBase64ToUint8Array(publicVapidKey)
});
console.log('Registered push');
console.log('Sending push');
await fetch('/subscribe', {
method: 'POST',
body: JSON.stringify(subscription),
headers: {
'content-type': 'application/json'
}
});
console.log('Sent push');
}
console.log('Loaded service worker!');
self.addEventListener('push', ev => {
const data = ev.data.json();
console.log('Got push', data);
self.registration.showNotification(data.title, {
body: 'Hello, World!',
icon: 'http://mongoosejs.com/docs/images/mongoose5_62x30_transparent.png'
});
});
$ env PUBLIC_VAPID_KEY='OMITTED' env PRIVATE_VAPID_KEY='OMITTED' node .