2021-08-16 12:12:34 +00:00
|
|
|
# Notifications
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Each operating system has its own mechanism to display notifications to users. Electron's notification
|
|
|
|
APIs are cross-platform, but are different for each process type.
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
If you want to use a renderer process API in the main process or vice-versa, consider using
|
|
|
|
[inter-process communication](./ipc.md).
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
## Usage
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Below are two examples showing how to display notifications for each process type.
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
### Show notifications in the main process
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Main process notifications are displayed using Electron's [Notification module](../api/notification.md).
|
|
|
|
Notification objects created using this module do not appear unless their `show()` instance
|
|
|
|
method is called.
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
```js title='Main Process'
|
2023-05-15 07:58:35 +00:00
|
|
|
const { Notification } = require('electron')
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-05-15 07:58:35 +00:00
|
|
|
const NOTIFICATION_TITLE = 'Basic Notification'
|
|
|
|
const NOTIFICATION_BODY = 'Notification from the Main process'
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
new Notification({
|
|
|
|
title: NOTIFICATION_TITLE,
|
2023-05-15 07:58:35 +00:00
|
|
|
body: NOTIFICATION_BODY
|
|
|
|
}).show()
|
2017-03-23 21:08:19 +00:00
|
|
|
```
|
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Here's a full example that you can open with Electron Fiddle:
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-11-21 07:50:08 +00:00
|
|
|
```fiddle docs/fiddles/features/notifications/main
|
|
|
|
const { app, BrowserWindow, Notification } = require('electron/main')
|
|
|
|
|
|
|
|
function createWindow () {
|
|
|
|
const win = new BrowserWindow({
|
|
|
|
width: 800,
|
|
|
|
height: 600
|
|
|
|
})
|
|
|
|
|
|
|
|
win.loadFile('index.html')
|
|
|
|
}
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-05-15 07:58:35 +00:00
|
|
|
const NOTIFICATION_TITLE = 'Basic Notification'
|
|
|
|
const NOTIFICATION_BODY = 'Notification from the Main process'
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-11-21 07:50:08 +00:00
|
|
|
function showNotification () {
|
|
|
|
new Notification({ title: NOTIFICATION_TITLE, body: NOTIFICATION_BODY }).show()
|
|
|
|
}
|
|
|
|
|
|
|
|
app.whenReady().then(createWindow).then(showNotification)
|
|
|
|
|
|
|
|
app.on('window-all-closed', () => {
|
|
|
|
if (process.platform !== 'darwin') {
|
|
|
|
app.quit()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
app.on('activate', () => {
|
|
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
|
|
createWindow()
|
|
|
|
}
|
|
|
|
})
|
2023-03-22 01:40:43 +00:00
|
|
|
```
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
### Show notifications in the renderer process
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Notifications can be displayed directly from the renderer process with the
|
|
|
|
[web Notifications API](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API).
|
2021-05-27 01:18:50 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
```js title='Renderer Process'
|
2023-05-15 07:58:35 +00:00
|
|
|
const NOTIFICATION_TITLE = 'Title'
|
2023-03-22 01:40:43 +00:00
|
|
|
const NOTIFICATION_BODY =
|
2023-05-15 07:58:35 +00:00
|
|
|
'Notification from the Renderer process. Click to log to console.'
|
|
|
|
const CLICK_MESSAGE = 'Notification clicked'
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
new Notification(NOTIFICATION_TITLE, { body: NOTIFICATION_BODY }).onclick =
|
2023-05-15 07:58:35 +00:00
|
|
|
() => console.log(CLICK_MESSAGE)
|
2020-10-20 02:24:27 +00:00
|
|
|
```
|
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Here's a full example that you can open with Electron Fiddle:
|
|
|
|
|
2023-11-21 07:50:08 +00:00
|
|
|
```fiddle docs/fiddles/features/notifications/renderer|focus=renderer.js
|
2023-05-15 07:58:35 +00:00
|
|
|
const NOTIFICATION_TITLE = 'Title'
|
2023-11-21 07:50:08 +00:00
|
|
|
const NOTIFICATION_BODY = 'Notification from the Renderer process. Click to log to console.'
|
|
|
|
const CLICK_MESSAGE = 'Notification clicked!'
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-11-21 07:50:08 +00:00
|
|
|
new window.Notification(NOTIFICATION_TITLE, { body: NOTIFICATION_BODY })
|
|
|
|
.onclick = () => { document.getElementById('output').innerText = CLICK_MESSAGE }
|
2023-03-22 01:40:43 +00:00
|
|
|
```
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
## Platform considerations
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2017-03-23 21:08:19 +00:00
|
|
|
While code and user experience across operating systems are similar, there
|
2017-05-01 23:00:25 +00:00
|
|
|
are subtle differences.
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
### Windows
|
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
For notifications on Windows, your Electron app needs to have a Start Menu shortcut with an
|
|
|
|
[AppUserModelID][app-user-model-id] and a corresponding [ToastActivatorCLSID][toast-activator-clsid].
|
|
|
|
|
|
|
|
Electron attempts to automate the work around the AppUserModelID and ToastActivatorCLSID. When
|
|
|
|
Electron is used together with Squirrel.Windows (e.g. if you're using electron-winstaller),
|
|
|
|
[shortcuts will automatically be set correctly][squirrel-events].
|
2018-06-16 00:32:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
In production, Electron will also detect that Squirrel was used and will automatically call
|
2018-06-16 00:32:19 +00:00
|
|
|
`app.setAppUserModelId()` with the correct value. During development, you may have
|
2019-01-08 21:40:57 +00:00
|
|
|
to call [`app.setAppUserModelId()`][set-app-user-model-id] yourself.
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
:::info Notifications in development
|
|
|
|
|
|
|
|
To quickly bootstrap notifications during development, adding
|
|
|
|
`node_modules\electron\dist\electron.exe` to your Start Menu also does the
|
|
|
|
trick. Navigate to the file in Explorer, right-click and 'Pin to Start Menu'.
|
|
|
|
Then, call `app.setAppUserModelId(process.execPath)` in the main process to see notifications.
|
|
|
|
|
|
|
|
:::
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
#### Use advanced notifications
|
|
|
|
|
|
|
|
Windows also allow for advanced notifications with custom templates, images, and other flexible
|
|
|
|
elements.
|
|
|
|
|
|
|
|
To send those notifications from the main process, you can use the userland module
|
|
|
|
[`electron-windows-notifications`](https://github.com/felixrieseberg/electron-windows-notifications),
|
2017-03-23 21:08:19 +00:00
|
|
|
which uses native Node addons to send `ToastNotification` and `TileNotification` objects.
|
|
|
|
|
2018-05-08 05:16:09 +00:00
|
|
|
While notifications including buttons work with `electron-windows-notifications`,
|
2020-10-20 02:24:27 +00:00
|
|
|
handling replies requires the use of
|
|
|
|
[`electron-windows-interactive-notifications`](https://github.com/felixrieseberg/electron-windows-interactive-notifications),
|
|
|
|
which helps with registering the required COM components and calling your
|
|
|
|
Electron app with the entered user data.
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
#### Query notification state
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
To detect whether or not you're allowed to send a notification, use the
|
2023-03-22 01:40:43 +00:00
|
|
|
userland module [`windows-notification-state`][windows-notification-state].
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
This module allows you to determine ahead of time whether or not Windows will silently throw the
|
|
|
|
notification away.
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
### macOS
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Notifications are straightforward on macOS, but you should be aware of
|
2020-10-20 02:24:27 +00:00
|
|
|
[Apple's Human Interface guidelines regarding notifications][apple-notification-guidelines].
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2017-05-01 23:00:25 +00:00
|
|
|
Note that notifications are limited to 256 bytes in size and will be truncated
|
2017-03-23 21:08:19 +00:00
|
|
|
if you exceed that limit.
|
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
#### Query notification state
|
2017-03-23 21:08:19 +00:00
|
|
|
|
|
|
|
To detect whether or not you're allowed to send a notification, use the userland module
|
2023-03-22 01:40:43 +00:00
|
|
|
[`macos-notification-state`][macos-notification-state].
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
This module allows you to detect ahead of time whether or not the notification will be displayed.
|
2020-10-20 02:24:27 +00:00
|
|
|
|
|
|
|
### Linux
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2023-03-22 01:40:43 +00:00
|
|
|
Notifications are sent using `libnotify`, which can show notifications on any
|
2024-05-29 09:41:15 +00:00
|
|
|
desktop environment that follows [Desktop Notifications Specification][notification-spec],
|
|
|
|
including Cinnamon, Enlightenment, Unity, GNOME, and KDE.
|
2017-10-12 12:55:21 +00:00
|
|
|
|
2024-05-30 09:06:16 +00:00
|
|
|
[notification-spec]: https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html
|
2023-03-22 01:40:43 +00:00
|
|
|
[app-user-model-id]: https://learn.microsoft.com/en-us/windows/win32/shell/appids
|
2018-06-16 00:32:19 +00:00
|
|
|
[set-app-user-model-id]: ../api/app.md#appsetappusermodelidid-windows
|
2023-01-02 10:52:18 +00:00
|
|
|
[squirrel-events]: https://github.com/electron/windows-installer/blob/main/README.md#handling-squirrel-events
|
2023-03-22 01:40:43 +00:00
|
|
|
[toast-activator-clsid]: https://learn.microsoft.com/en-us/windows/win32/properties/props-system-appusermodel-toastactivatorclsid
|
2023-05-08 08:05:50 +00:00
|
|
|
[apple-notification-guidelines]: https://developer.apple.com/design/human-interface-guidelines/notifications
|
2023-03-22 01:40:43 +00:00
|
|
|
[windows-notification-state]: https://github.com/felixrieseberg/windows-notification-state
|
|
|
|
[macos-notification-state]: https://github.com/felixrieseberg/macos-notification-state
|