macOS や最近の Windows、モバイル OS では、アプリがユーザーに通知を送るためには明示的な許可が必要です。
前提条件
プラグインの追加
通知機能を利用するには notification プラグインが必要です。
npm run tauri add notification
src-tauri/src/lib.rs に .plugin(tauri_plugin_notification::init()) が追加されていることを確認してください。
Permissions (権限) の設定
src-tauri/capabilities/default.json に notification:default 権限を追加します。
{
"permissions": [
...,
"notification:default"
]
}
1. フロントエンドから作成する (TypeScript)
@tauri-apps/plugin-notification の requestPermission 関数を使用します。
許可状態の確認とリクエスト
最も一般的な実装パターンです。「許可されているか確認」→「されていなければリクエスト」→「結果に応じて処理」という流れになります。
import { isPermissionGranted, requestPermission, sendNotification } from '@tauri-apps/plugin-notification';
async function checkAndNotify() {
// 1. 現在の許可状態を確認する
let permission = await isPermissionGranted();
// 2. 許可されていない場合、ユーザーに許可を求める
if (!permission) {
const request = await requestPermission();
permission = request === 'granted';
}
// 3. 結果の確認
if (permission) {
console.log('通知が許可されました');
sendNotification('これはテスト通知です');
} else {
console.log('通知が拒否されました');
// 必要に応じて、設定画面への誘導などを表示する
}
}
2. バックエンドから作成する (Rust)
Rust 側で許可状態を管理する場合の例です。
許可リクエスト
#[tauri::command]
fn request_permission(app: tauri::AppHandle) {
use tauri_plugin_notification::NotificationExt;
match app.notification().request_permission() {
Ok(permission) => {
println!("Permission granted: {:?}", permission);
}
Err(e) => {
println!("Error requesting permission: {}", e);
}
}
}
// main.rs または lib.rs でハンドラを登録します
// .invoke_handler(tauri::generate_handler![request_permission])
補足
isPermissionGranted(): 現在のアプリが通知を表示する権利を持っているかどうかをbooleanで返します。requestPermission():- まだユーザーが判断を下していない場合、OS 標準の「通知を許可しますか?」というダイアログを表示します。
- 既にユーザーが「拒否」を選択済みの場合、ダイアログは表示されずに即座に
'denied'が返されることが多いです(OSの仕様による)。この場合、アプリ側から設定画面を開くようユーザーに案内する必要があります。 - OSごとの挙動:
- macOS: 非常に厳格です。許可がないと通知は一切表示されません。
- Windows: アクションセンターの設定によりますが、比較的緩やかです。ただし、今後のバージョンで挙動が変わる可能性があります。
- Linux: デスクトップ環境(GNOME, KDEなど)に依存します。