2021-08-16 12:12:34 +00:00
|
|
|
# Notifications
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
## Overview
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
All three operating systems provide means for applications to send
|
|
|
|
notifications to the user. The technique of showing notifications is different
|
|
|
|
for the Main and Renderer processes.
|
|
|
|
|
|
|
|
For the Renderer process, Electron conveniently allows developers to send
|
|
|
|
notifications with the [HTML5 Notification API](https://notifications.spec.whatwg.org/),
|
|
|
|
using the currently running operating system's native notification APIs
|
|
|
|
to display it.
|
|
|
|
|
|
|
|
To show notifications in the Main process, you need to use the
|
2017-05-20 11:25:26 +00:00
|
|
|
[Notification](../api/notification.md) module.
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
## Example
|
|
|
|
|
|
|
|
### Show notifications in the Renderer process
|
|
|
|
|
2021-06-07 04:02:20 +00:00
|
|
|
Starting with a working application from the
|
2020-10-20 02:24:27 +00:00
|
|
|
[Quick Start Guide](quick-start.md), add the following line to the
|
|
|
|
`index.html` file before the closing `</body>` tag:
|
|
|
|
|
|
|
|
```html
|
|
|
|
<script src="renderer.js"></script>
|
|
|
|
```
|
|
|
|
|
2021-06-07 04:02:20 +00:00
|
|
|
...and add the `renderer.js` file:
|
2020-10-20 02:24:27 +00:00
|
|
|
|
2020-11-30 07:48:39 +00:00
|
|
|
```javascript fiddle='docs/fiddles/features/notifications/renderer'
|
2021-06-07 04:02:20 +00:00
|
|
|
const NOTIFICATION_TITLE = 'Title'
|
|
|
|
const NOTIFICATION_BODY = 'Notification from the Renderer process. Click to log to console.'
|
|
|
|
const CLICK_MESSAGE = 'Notification clicked'
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2021-06-07 04:02:20 +00:00
|
|
|
new Notification(NOTIFICATION_TITLE, { body: NOTIFICATION_BODY })
|
|
|
|
.onclick = () => console.log(CLICK_MESSAGE)
|
2017-03-23 21:08:19 +00:00
|
|
|
```
|
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
After launching the Electron application, you should see the notification:
|
|
|
|
|
|
|
|
![Notification in the Renderer process](../images/notification-renderer.png)
|
|
|
|
|
2021-06-07 04:02:20 +00:00
|
|
|
Additionally, if you click on the notification, the DOM will update to show "Notification clicked!".
|
2020-10-20 02:24:27 +00:00
|
|
|
|
|
|
|
### Show notifications in the Main process
|
|
|
|
|
|
|
|
Starting with a working application from the
|
|
|
|
[Quick Start Guide](quick-start.md), update the `main.js` file with the following lines:
|
|
|
|
|
2020-11-30 07:48:39 +00:00
|
|
|
```javascript fiddle='docs/fiddles/features/notifications/main'
|
2020-10-20 02:24:27 +00:00
|
|
|
const { Notification } = require('electron')
|
|
|
|
|
2021-05-27 01:18:50 +00:00
|
|
|
const NOTIFICATION_TITLE = 'Basic Notification'
|
|
|
|
const NOTIFICATION_BODY = 'Notification from the Main process'
|
|
|
|
|
2021-08-02 01:57:37 +00:00
|
|
|
const showNotification = () => {
|
2021-05-27 01:18:50 +00:00
|
|
|
new Notification({ title: NOTIFICATION_TITLE, body: NOTIFICATION_BODY }).show()
|
2020-10-20 02:24:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
app.whenReady().then(createWindow).then(showNotification)
|
|
|
|
```
|
|
|
|
|
2021-05-27 01:18:50 +00:00
|
|
|
After launching the Electron application, you should see the system notification:
|
2020-10-20 02:24:27 +00:00
|
|
|
|
|
|
|
![Notification in the Main process](../images/notification-main.png)
|
|
|
|
|
|
|
|
## Additional information
|
|
|
|
|
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
|
|
|
|
|
|
|
|
* On Windows 10, a shortcut to your app with an
|
|
|
|
[Application User Model ID][app-user-model-id] must be installed to the
|
|
|
|
Start Menu. This can be overkill during development, so 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'.
|
|
|
|
You will then need to add the line `app.setAppUserModelId(process.execPath)` to
|
|
|
|
your main process to see notifications.
|
2018-06-16 00:32:19 +00:00
|
|
|
* On Windows 8.1 and Windows 8, a shortcut to your app with an [Application User
|
|
|
|
Model ID][app-user-model-id] must be installed to the Start screen. Note,
|
2017-03-23 21:08:19 +00:00
|
|
|
however, that it does not need to be pinned to the Start screen.
|
2017-05-01 22:59:00 +00:00
|
|
|
* On Windows 7, notifications work via a custom implementation which visually
|
2018-06-16 00:32:19 +00:00
|
|
|
resembles the native one on newer systems.
|
|
|
|
|
|
|
|
Electron attempts to automate the work around the Application User Model ID. When
|
|
|
|
Electron is used together with the installation and update framework Squirrel,
|
|
|
|
[shortcuts will automatically be set correctly][squirrel-events]. Furthermore,
|
|
|
|
Electron will detect that Squirrel was used and will automatically call
|
|
|
|
`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
|
|
|
|
|
|
|
Furthermore, in Windows 8, the maximum length for the notification body is 250
|
|
|
|
characters, with the Windows team recommending that notifications should be kept
|
|
|
|
to 200 characters. That said, that limitation has been removed in Windows 10, with
|
|
|
|
the Windows team asking developers to be reasonable. Attempting to send gigantic
|
|
|
|
amounts of text to the API (thousands of characters) might result in instability.
|
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
#### Advanced Notifications
|
2017-03-23 21:08:19 +00:00
|
|
|
|
|
|
|
Later versions of Windows allow for advanced notifications, with custom templates,
|
|
|
|
images, and other flexible elements. To send those notifications (from either the
|
|
|
|
main process or the renderer process), use the userland module
|
|
|
|
[electron-windows-notifications](https://github.com/felixrieseberg/electron-windows-notifications),
|
|
|
|
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
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
#### Quiet Hours / Presentation Mode
|
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
|
|
|
|
userland module [electron-notification-state](https://github.com/felixrieseberg/electron-notification-state).
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
This 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
|
|
|
|
2017-05-01 23:00:25 +00:00
|
|
|
Notifications are straight-forward 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.
|
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
[apple-notification-guidelines]: https://developer.apple.com/macos/human-interface-guidelines/system-capabilities/notifications/
|
|
|
|
|
|
|
|
#### Do not disturb / Session 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
|
2020-10-20 02:24:27 +00:00
|
|
|
[electron-notification-state][electron-notification-state].
|
2017-03-23 21:08:19 +00:00
|
|
|
|
|
|
|
This will allow you to detect ahead of time whether or not the notification will be displayed.
|
|
|
|
|
2020-10-20 02:24:27 +00:00
|
|
|
[electron-notification-state]: https://github.com/felixrieseberg/electron-notification-state
|
|
|
|
|
|
|
|
### Linux
|
2017-03-23 21:08:19 +00:00
|
|
|
|
2017-05-01 23:00:25 +00:00
|
|
|
Notifications are sent using `libnotify` which can show notifications on any
|
2017-03-23 21:08:19 +00:00
|
|
|
desktop environment that follows [Desktop Notifications
|
|
|
|
Specification][notification-spec], including Cinnamon, Enlightenment, Unity,
|
|
|
|
GNOME, KDE.
|
2017-10-12 12:55:21 +00:00
|
|
|
|
|
|
|
[notification-spec]: https://developer.gnome.org/notification-spec/
|
2017-11-03 18:52:27 +00:00
|
|
|
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx
|
2018-06-16 00:32:19 +00:00
|
|
|
[set-app-user-model-id]: ../api/app.md#appsetappusermodelidid-windows
|
2019-01-08 16:16:30 +00:00
|
|
|
[squirrel-events]: https://github.com/electron/windows-installer/blob/master/README.md#handling-squirrel-events
|