You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Electron应用如何自动获取macOS隐私无障碍权限恢复键鼠统计功能

在macOS上为Electron应用获取无障碍权限的方案

好问题!首先得明确一点:macOS出于隐私安全的强制要求,不允许任何应用自动获取无障碍(Accessibility)权限——这是苹果刻意设计的防护机制,防止恶意软件窃取用户的输入操作。不过我们可以通过优化流程,让用户更顺畅地手动开启权限,下面是具体的实现方法:

1. 检测权限状态并引导用户

首先,你可以用Electron内置的API检查当前应用是否已获得无障碍权限:

const { systemPreferences, shell, dialog } = require('electron');

// 检查权限状态
const hasAccessibilityPermission = systemPreferences.isTrustedAccessibilityClient(true);

if (!hasAccessibilityPermission) {
  // 弹出提示告知用户需要权限
  dialog.showMessageBox({
    type: 'warning',
    title: '需要无障碍权限',
    message: '为了统计鼠标和键盘操作,请在系统设置中开启无障碍权限',
    buttons: ['去设置', '取消']
  }).then((result) => {
    if (result.response === 0) {
      // 直接跳转到无障碍权限设置页面
      shell.openExternal('x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility');
    }
  });
}

这段代码会先检查权限,如果未授权就弹出提示,用户点击「去设置」后会直接跳转到系统设置的隐私-无障碍页面,不用手动逐层查找。

2. 配置权限描述与打包参数

为了让用户更清楚为什么需要这个权限,你需要在打包时给应用添加权限说明,同时配置必要的权限文件:

(1)在package.json中添加权限描述

在Electron的打包配置(比如electron-builder的配置)里,添加NSAccessibilityUsageDescription

{
  "build": {
    "mac": {
      "extendInfo": {
        "NSAccessibilityUsageDescription": "需要无障碍权限来统计您的鼠标和键盘操作,以便提供使用行为分析服务"
      }
    }
  }
}

这个描述会显示在系统设置的权限列表中,帮助用户理解授权的原因,提升授权意愿。

(2)配置entitlements文件

创建一个entitlements.mac.plist文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>com.apple.security.accessibility</key>
  <true/>
</dict>
</plist>

然后在package.json的打包配置中引用这个文件:

{
  "build": {
    "mac": {
      "entitlements": "entitlements.mac.plist",
      "entitlementsInherit": "entitlements.mac.plist"
    }
  }
}

这个配置会告诉系统你的应用需要申请无障碍权限,是打包时的必要步骤。

3. 处理权限变更后的生效逻辑

用户在系统设置中开启权限后,应用需要重新检测权限才能生效。你可以:

  • 提示用户重启应用(最简单可靠的方式)
  • 或者在主进程中定期重新检查权限状态,当检测到权限已开启时,自动初始化统计功能

开发环境注意事项

在开发阶段,你使用的是Electron的默认运行时(比如electron .命令启动的进程),所以需要手动给这个Electron进程添加无障碍权限:

  1. 打开系统设置 → 隐私与安全性 → 无障碍
  2. 点击加号,找到你本地的Electron二进制文件(通常在node_modules/electron/dist/Electron.app),添加并勾选允许

打包后的应用则需要单独添加到权限列表中,和开发环境的设置是分开的。

重要提醒

再次强调:没有任何方法可以绕过macOS的手动授权要求自动获取无障碍权限,这是苹果的隐私安全红线,所有应用都必须遵守。我们能做的就是优化用户的授权流程,让操作更简单清晰。

内容的提问来源于stack exchange,提问作者P. James

火山引擎 最新活动