Electrón con notificador de nodo muestra notificación de windows 10

Estoy intentando crear una aplicación simple que debería mostrar una notificación cuando se hace clic en el botón. El problema es que la notificación no se muestra, pero console.logs se muestra. ¿Debería funcionar la notificación en modo de desarrollo? (es decir, solo ejecutando electron . , y no tengo que comstackr e instalar la aplicación)

Windows OS:

  • Edición: Windows 10 Home
  • Versión: 1709
  • Construido: 16299.98
  • NOTA: Toast está habilitado (banner, centro de acción) en System->Notification & Actions

Código:

 // main.js const { app, BrowserWindow, ipcMain, Notification } = require("electron"); const path = require("path"); const url = require("url"); let win; function createWindow() { // Create the browser window. win = new BrowserWindow({ width: 800, height: 600 }); // and load the index.html of the app. win.loadURL( url.format({ pathname: path.join(__dirname, "index.html"), protocol: "file:", slashes: true }) ); // Open the DevTools. // win.webContents.openDevTools() // Emitted when the window is closed. win.on("closed", () => { // Dereference the window object, usually you would store windows // in an array if your app supports multi windows, this is the time // when you should delete the corresponding element. win = null; }); } const appId = "elite-notifier"; app.setAppUserModelId(appId); app.on("ready", createWindow); console.log("notifying"); ipcMain.on("notify", () => { console.log("notified"); const WindowsToaster = require("node-notifier").WindowsToaster; const notifier = new WindowsToaster({ withFallback: false }); notifier.notify( { title: "My awesome title", message: "Hello from node, Mr. User!", sound: true, // Only Notification Center or Windows Toasters wait: false // Wait with callback, until user action is taken against notification }, function(err, response) { // Response is response from notification console.log("responded..."); } ); }); // index.html     Hello World!   

Notifier!

const { ipcRenderer } = require('electron'); const button = document.getElementById('notify'); console.log('BUTTON: ', button) button.addEventListener('click', function(event) { console.log('clicked...'); ipcRenderer.send('notify') });

Lo tengo funcionando ahora, gracias a todas las personas aquí 🙂 https://github.com/mikaelbr/node-notifier/issues/144#issuecomment-319324058

Basado en el comentario de anthonyraymond , debe tener su aplicación INSTALLED en su máquina Windows con un idId. Puede configurar appId en su package.json esta manera.

 { "name": "myapp", "version": "1.0.0", "description": "test", "main": "main.js", "build": { "appId": "com.myapp.id" } } 

El appId no necesita tener ese formato java/android , mi aplicación solo tiene un appId de appId de elite-notifier de elite-notifier .

Luego puede pasar el appId al llamar a la función de notificación del notificador.

 notifier.notify( { appName: "com.myapp.id", <-- yes, the key here is appName :) title: "Hello", message: "Hello world!", wait: true }, function(err, response) { // Response is response from notification console.log("responded..."); } ); 

Después de la instalación, esto funcionará incluso en el modo de desarrollo ( ejecutando electron . comando electron . ) Siempre que no cambie el appId de aplicación de su aplicación después de la instalación ya que habrá una discrepancia entre el instalado y la versión de desarrollo de la aplicación.

No es necesario utilizar IPC y enviar notificaciones desde el proceso principal, esto se admite desde el proceso del renderizador utilizando la API de notificación HTML5 .

 let myNotification = new Notification('Title', { body: 'Lorem Ipsum Dolor Sit Amet' }) myNotification.onclick = () => { console.log('Notification clicked') }