4

我正在尝试制作一个简单的应用程序,该应用程序应在单击按钮时显示通知。问题是通知没有显示,但console.logs 显示。通知是否应该适用于开发模式?(意味着只是运行electron .,我不必构建和安装应用程序)

视窗操作系统:

  • 版本:Windows 10 家庭版
  • 版本:1709
  • 构建:16299.98
  • 注意:Toast 在下方启用(横幅、操作中心)System->Notification & Actions

代码:

// 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
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Hello World!</title>
</head>

<body>
  <h1>Notifier!</h1>
  <button type="button" id="notify">Click here to trigger a notification!</button>
      <script type="text/javascript">
         const { ipcRenderer } = require('electron');

         const button = document.getElementById('notify');
         console.log('BUTTON: ', button)
         button.addEventListener('click', function(event) {
            console.log('clicked...');
            ipcRenderer.send('notify')
         });
      </script>
</body>

</html>
4

5 回答 5

12

我现在已经开始工作了,感谢这里的所有人:) https://github.com/mikaelbr/node-notifier/issues/144#issuecomment-319324058

根据anthonyraymond的评论,您需要INSTALLED在您的 Windows 机器中使用 appId 来安装您的应用程序。您可以像这样配置appIdpackage.json

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

appId不需要有那种格式,我的java/android应用程序只有一个appId.elite-notifier

然后你可以appId在调用notify通知器的函数时传递。

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...");
    }
  );

安装后,即使在开发模式下(通过运行electron .命令)也可以使用,前提是您appId在安装后不会更改应用程序的版本,因为已安装的版本与应用程序的开发版本不匹配。

于 2017-12-17T06:37:53.193 回答
1

您不需要使用 IPC 并从主进程发送通知,渲染器进程使用 HTML5 通知 API 支持这一点。

let myNotification = new Notification('Title', {
  body: 'Lorem Ipsum Dolor Sit Amet'
})

myNotification.onclick = () => {
  console.log('Notification clicked')
}
于 2017-12-15T12:33:13.810 回答
1

我也尝试了很多东西,但有时它是否有效。

终于,我找到了办法。这不仅适用于“npm run dev”,而且适用于构建的包。

这里的 app id 可以是任何类型的字符串。

于 2019-07-15T00:25:43.483 回答
1

此错误不需要任何配置,您只需转到设置并启用通知,因为在某些情况下,在您的计算机上,您只是关闭了通知。

System Setting ->Notification & Actions 

然后打开通知通过点击开关(问题解决)

于 2020-09-25T13:46:08.553 回答
0

你可以这样做,即使在 Windows 10 上它也适用于我。

  1. 在 package.json
 "build": {
 "appId": "your.custom.app.id",
 }
  1. 在 main.js 中
app.setAppUserModelId("your.custom.app.id");
于 2019-08-27T11:55:32.347 回答