Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在使用node js的web技术中,是否可以使用Badge Api进行推送通知?_Node.js - Fatal编程技术网

Node.js 在使用node js的web技术中,是否可以使用Badge Api进行推送通知?

Node.js 在使用node js的web技术中,是否可以使用Badge Api进行推送通知?,node.js,Node.js,我们有一个网站,它是一个社交媒体web应用程序。它包含与社交媒体应用程序类似的所有功能。我们需要在主屏幕中显示徽章通知。这是一个web技术应用程序,我们试图找到可能的解决方案,但尚未找到任何解决方案。使用,您可以直接从Node.js应用程序向Chrome发送推送通知。优秀的web推送功能允许您发送推送通知,而无需通过中间服务,如。本文将引导您使用香草JavaScript前端和后端设置web推送通知的“Hello,World”示例。最终结果将如下图所示。此项目的完整来源可在上获得 凭据和服务器设置

我们有一个网站,它是一个社交媒体web应用程序。它包含与社交媒体应用程序类似的所有功能。我们需要在主屏幕中显示徽章通知。这是一个web技术应用程序,我们试图找到可能的解决方案,但尚未找到任何解决方案。

使用,您可以直接从Node.js应用程序向Chrome发送推送通知。优秀的web推送功能允许您发送推送通知,而无需通过中间服务,如。本文将引导您使用香草JavaScript前端和后端设置web推送通知的“Hello,World”示例。最终结果将如下图所示。此项目的完整来源可在上获得

凭据和服务器设置

为了进行设置,您需要创建一组乏味的关键点。无控制键标识发送推送通知的用户。web推送npm模块可以为您提供支持,因此让我们安装
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 .