Electron 应用程序在 macOS Monterey 上不请求相机和麦克风权限

Jiv*_*van 5 macos electron electron-builder electron-packager macos-monterey

我已经构建了一个堆栈电子和reactjs的应用程序。我正在尝试从应用程序访问摄像头和麦克风。但该应用程序在请求时不会请求许可,也不会显示在“系统偏好设置”->“安全和隐私”下的摄像头和麦克风下。以下是我正在使用的版本:

"electron": "^15.3.0",
"electron-builder": "^22.14.5",
"electron-devtools-installer": "^3.2.0",
"electron-notarize": "^1.1.1",
"electron-rebuild": "^3.2.3", 
"react": "^17.0.2"
Run Code Online (Sandbox Code Playgroud)

让我知道我缺少什么或需要改变什么。提前致谢。

Cai*_*kai 11

我也遇到了这个问题,它在 macOS Catalina 中运行良好,但在蒙特利有时却不能。

我在阅读电子官方文档后解决了这个问题:

“如果您计划使用 Electron 的 API 访问应用程序中的麦克风或摄像头,您还需要添加以下权利”

<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

要添加权利,因为您正在使用,electron-builder您可以使用一个配置package.json来添加它,"mac"添加以下内容:

"extendInfo": {
        "NSMicrophoneUsageDescription": "Please give us access to your microphone",
        "NSCameraUsageDescription": "Please give us access to your camera",
        "com.apple.security.device.audio-input": true,
        "com.apple.security.device.camera": true
      },
Run Code Online (Sandbox Code Playgroud)

然后您需要添加以下行来请求媒体权限:


const { systemPreferences } = require('electron')

const microphone = systemPreferences.askForMediaAccess('microphone');
const camera = systemPreferences.askForMediaAccess('camera');

Run Code Online (Sandbox Code Playgroud)