使用 GCM 发送 Web 通知(Google Cloud Messaging System)

这样的例子知道 PWA (渐进式 Web 应用程序) 之间的广泛传播,在这个例子中,我们将使用 NodeJSES6 发送一个简单的后端,如通知 ****

  1. 安装 Node-GCM 模块:npm install node-gcm

  2. 安装 Socket.io:npm install socket.io

  3. 使用 Google 控制台创建启用 GCM 的应用程序

  4. Grabe 你的 GCM 应用程序 ID(稍后我们将需要它)

  5. Grabe 你的 GCM 应用密码。

  6. 打开你最喜欢的代码编辑器并添加以下代码:

     '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 文件需要在根目录中,否则无效。

在上面的代码中,我正在做以下事情:

  1. 我发布了一个普通的 index.html 页面,它也将使用 socket.io。
  2. 我正在侦听从前端( 也就是我的 index.html 页面) 触发的连接事件 (一旦新客户端成功连接到我们的预定义链接,它就会被触发) **** ****
  3. 我通过 socket.io new_user 事件从我的 index.html 发送一个特殊令牌知道作为注册令牌,这样的令牌将是我们用户唯一的密码,每个代码通常来自 Web 通知 API 的支持浏览器 (阅读更多这里。 **** ****
  4. 我只是使用 node-gcm 模块发送我的通知,这些通知将在稍后使用 Service Workers` 进行处理和显示。

这是从 NodeJS 的角度来看的。在其他示例中,我将展示如何在推送消息中发送自定义数据,图标..etc。

PS:你可以在这里找到完整的工作演示