17 Notification

原文链接: https://tauri.app/plugin/notification/

使用 notification 插件向用户发送原生通知。

支持的平台

平台支持程度说明
Windows完整支持
Linux完整支持
macOS完整支持
Android完整支持
iOS完整支持

设置

自动

使用你的项目包管理器添加依赖:

1
npm run tauri add notification
1
yarn run tauri add notification
1
pnpm tauri add notification
1
deno task tauri add notification
1
bun tauri add notification
1
cargo tauri add notification

手动

  1. 在 src-tauri 文件夹中运行以下命令,把插件加入 Cargo.toml 里的项目依赖:

    1
    
    cargo add tauri-plugin-notification
    
  2. 修改 lib.rs 初始化插件:

    1
    2
    3
    4
    5
    6
    7
    
    #[cfg_attr(mobile, tauri::mobile_entry_point)]
    pub fn run() {
        tauri::Builder::default()
            .plugin(tauri_plugin_notification::init())
            .run(tauri::generate_context!())
            .expect("error while running tauri application");
    }
    
  3. 用你偏好的 JavaScript 包管理器安装 JavaScript 端绑定:

1
npm install @tauri-apps/plugin-notification
1
yarn add @tauri-apps/plugin-notification
1
pnpm add @tauri-apps/plugin-notification
1
deno add npm:@tauri-apps/plugin-notification
1
bun add @tauri-apps/plugin-notification

用法

下面是使用 notification 插件的几个示例:

notification 插件在 JavaScript 和 Rust 中都可以使用。

发送通知

按以下步骤发送一条通知:

  1. 检查是否已授予权限

  2. 如果未授予则请求权限

  3. 发送通知

语言

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import {
  isPermissionGranted,
  requestPermission,
  sendNotification,
} from '@tauri-apps/plugin-notification';
// 使用 `"withGlobalTauri": true` 时,你可以这样写
// const { isPermissionGranted, requestPermission, sendNotification, } = window.__TAURI__.notification;

// 你有发送通知的权限吗?
let permissionGranted = await isPermissionGranted();

// 如果没有,我们需要请求它
if (!permissionGranted) {
  const permission = await requestPermission();
  permissionGranted = permission === 'granted';
}

// 一旦获得权限,我们就可以发送通知了
if (permissionGranted) {
  sendNotification({ title: 'Tauri', body: 'Tauri is awesome!' });
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
tauri::Builder::default()
    .plugin(tauri_plugin_notification::init())
    .setup(|app| {
        use tauri_plugin_notification::NotificationExt;
        app.notification()
            .builder()
            .title("Tauri")
            .body("Tauri is awesome")
            .show()
            .unwrap();

        Ok(())
    })
    .run(tauri::generate_context!())
    .expect("error while running tauri application");

操作

操作为通知添加可交互的按钮和输入框。用它们可以为用户创造可响应的体验。

注册操作类型

注册操作类型以定义可交互元素:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import { registerActionTypes } from '@tauri-apps/plugin-notification';

await registerActionTypes([
  {
    id: 'messages',
    actions: [
      {
        id: 'reply',
        title: 'Reply',
        input: true,
        inputButtonTitle: 'Send',
        inputPlaceholder: 'Type your reply...',
      },
      {
        id: 'mark-read',
        title: 'Mark as Read',
        foreground: false,
      },
    ],
  },
]);

操作属性

属性说明
id操作的唯一标识符
title操作按钮的显示文本
requiresAuthentication需要设备认证
foreground触发时把应用带到前台
destructive在 iOS 上以红色显示该操作
input启用文本输入
inputButtonTitle输入提交按钮的文本
inputPlaceholder输入框的占位文本

监听操作

监听用户与通知操作的交互:

1
2
3
4
5
import { onAction } from '@tauri-apps/plugin-notification';

await onAction((notification) => {
  console.log('Action performed:', notification);
});

附件

附件为通知添加媒体内容。各平台的支持程度不同。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import { sendNotification } from '@tauri-apps/plugin-notification';

sendNotification({
  title: 'New Image',
  body: 'Check out this picture',
  attachments: [
    {
      id: 'image-1',
      url: 'asset:///notification-image.jpg',
    },
  ],
});

附件属性

属性说明
id唯一标识符
url使用 asset:// 或 file:// 协议的内容 URL

注意:请在目标平台上测试附件以确保兼容性。

渠道

渠道(channel)把通知归入具有不同行为的分类。它主要用于 Android,但在各平台上提供一致的 API。

创建渠道

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import {
  createChannel,
  Importance,
  Visibility,
} from '@tauri-apps/plugin-notification';

await createChannel({
  id: 'messages',
  name: 'Messages',
  description: 'Notifications for new messages',
  importance: Importance.High,
  visibility: Visibility.Private,
  lights: true,
  lightColor: '#ff0000',
  vibration: true,
  sound: 'notification_sound',
});

渠道属性

属性说明
id唯一标识符
name显示名称
description用途描述
importance优先级(None、Min、Low、Default、High)
visibility隐私设置(Secret、Private、Public)
lights启用通知 LED(Android)
lightColorLED 颜色(Android)
vibration启用振动
sound自定义提示音文件名

管理渠道

列出已有渠道:

1
2
3
import { channels } from '@tauri-apps/plugin-notification';

const existingChannels = await channels();

移除渠道:

1
2
3
import { removeChannel } from '@tauri-apps/plugin-notification';

await removeChannel('messages');

使用渠道

使用某个渠道发送通知:

1
2
3
4
5
6
7
import { sendNotification } from '@tauri-apps/plugin-notification';

sendNotification({
  title: 'New Message',
  body: 'You have a new message',
  channelId: 'messages',
});

注意:在发送引用某渠道的通知之前先创建该渠道。无效的渠道 ID 会导致通知无法显示。

安全考量

除了对用户输入进行常规净化处理之外,目前没有已知的安全考量。

最后修改 September 26, 2026: 更新 (630b11f59)