使用 GCM 发送 Web 通知(Google Cloud Messaging System)
这样的例子知道 PWA (渐进式 Web 应用程序) 之间的广泛传播,在这个例子中,我们将使用 NodeJS 和 ES6 发送一个简单的后端,如通知 ****
-
安装 Node-GCM 模块:
npm install node-gcm
-
安装 Socket.io:
npm install socket.io
-
使用 Google 控制台创建启用 GCM 的应用程序。
-
Grabe 你的 GCM 应用程序 ID(稍后我们将需要它)
-
Grabe 你的 GCM 应用密码。
-
打开你最喜欢的代码编辑器并添加以下代码:
'use strict'; const express = require('express'); const app = express(); const gcm = require('node-gcm'); app.io = require('socket.io')(); // [*] Configuring our GCM Channel. const sender = new gcm.Sender('Project Secret'); const regTokens = []; let message = new gcm.Message({ data: { key1: 'msg1' } }); // [*] Configuring our static files. app.use(express.static('public/')); // [*] Configuring Routes. app.get('/', (req, res) => { res.sendFile(__dirname + '/public/index.html'); }); // [*] Configuring our Socket Connection. app.io.on('connection', socket => { console.log('we have a new connection ...'); socket.on('new_user', (reg_id) => { // [*] Adding our user notification registration token to our list typically hided in a secret place. if (regTokens.indexOf(reg_id) === -1) { regTokens.push(reg_id); // [*] Sending our push messages sender.send(message, { registrationTokens: regTokens }, (err, response) => { if (err) console.error('err', err); else console.log(response); }); } }) }); module.exports = app
PS:我在这里使用一个特殊的 hack 来使 Socket.io 与 Express 一起工作,因为它只是在盒子外面不起作用。
现在创建一个 .json 文件并将其命名为: Manifest.json ,打开它并超过以下内容:
{
"name": "Application Name",
"gcm_sender_id": "GCM Project ID"
}
关闭它并保存在你的应用程序 ROOT 目录中。
PS:Manifest.json 文件需要在根目录中,否则无效。
在上面的代码中,我正在做以下事情:
- 我发布了一个普通的 index.html 页面,它也将使用 socket.io。
- 我正在侦听从前端( 也就是我的 index.html 页面) 触发的连接事件 (一旦新客户端成功连接到我们的预定义链接,它就会被触发) **** ****
- 我通过 socket.io new_user 事件从我的 index.html 发送一个特殊令牌知道作为注册令牌,这样的令牌将是我们用户唯一的密码,每个代码通常来自 Web 通知 API 的支持浏览器 (阅读更多这里。 **** ****
- 我只是使用 node-gcm 模块发送我的通知,这些通知将在稍后使用 Service Workers` 进行处理和显示。
这是从 NodeJS 的角度来看的。在其他示例中,我将展示如何在推送消息中发送自定义数据,图标..etc。