亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

在 Electron 應用中,獲取 Mac 的攝像頭和麥克風權限的兩種方式

2025-10-11 10:04:18
10
0

在使用 Electron 開發應用時,有很多時候需要音視頻聊天相關的業務,但是在 Mac 中,默認是獲取不到攝像頭和麥克風的權限的,在獲取攝像頭和麥克風權限之前,需要判斷是否已經獲取了權限,若是沒有,那么需要引導MAc用戶去系統設置中開啟權限。

1. 配置要獲取的權限

首先是在對應用打包時,要先聲明可能要使用的權限。先創建一個 entitlements.mac.plist 文件,內容如下:

 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "//www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.device.audio-input</key>
    <true/>
    <key>com.apple.security.device.camera</key>
    <true/>
  </dict>
</plist>

Electron 應用是使用的 electron-builder 構建的, electron-builder.json 需要添加如下配置:
{
  "mac": {
    "hardenedRuntime": true,
    "gatekeeperAssess": false,
    "entitlementsInherit": "build/entitlements.mac.plist",
    "extendInfo": {
      "NSDocumentsFolderUsageDescription": "需要訪問您的文檔目錄以展示相關文件",
      "NSDownloadsFolderUsageDescription": "需要訪問您的下載目錄以展示相關文件",
      "NSMicrophoneUsageDescription": "請允許訪問您的麥克風",
      "NSCameraUsageDescription": "請允許訪問您的攝像頭"
    }
  }
}

配置完成后,就可以在程序中索取需要的權限了

2. 獲取權限

音視頻通話前,仍然需要先判斷,是否已經獲取了權限。若沒有獲取權限,最好跳轉到設置頁面,讓用戶手動打開

在 electron 中,獲取權限的代碼如下:

import { ipcMain, systemPreferences } from "electron";

// 判斷是否有相關的權限
ipcMain.handle("getMediaAccess", (_, mediaType: "microphone" | "camera" | "screen") => {
  const access = systemPreferences.getMediaAccessStatus(mediaType) === "granted";
  logger.info(`get ${mediaType} access: ${access}`);
  return access;
});

// 索取權限
ipcMain.handle("askForMediaAccess", (_, mediaType: "microphone" | "camera") => {
  return systemPreferences.askForMediaAccess(mediaType);
});

// 打開設置頁
ipcMain.handle(
  "openSystemPreferences",
  (_, security: "Privacy_ScreenCapture" | "Privacy_Camera" | "Privacy_Microphone") => {
    if (os.platform() === "darwin") {
      const pane = "security";
      exec(`open "x-apple.systempreferences:com.apple.preference.${pane}?${security}"`);
    }
  }
);

在前端頁面中:

const handleClick = async (mediaType: "screen" | "camera" | "microphone") => {
  const access = await window.electronAPI?.ipcInvoke("getMediaAccess", mediaType);
  if (!access) {
    message.warning("暫無權限");
    const result = await window.electronAPI?.ipcInvoke("askForMediaAccess", mediaType);
    if (result) {
      return;
    }

    window.electronAPI?.ipcInvoke("openSystemPreferences", mapping[mediaType].system);
  }
};

 

 

3. 總結

Mac 的操作系統通常有更嚴格的管理權限機制,比如訪問攝像頭、麥克風、定位權限等等。在使用時,要考慮到授權的問題。

0條評論
0 / 1000
c****u
9文章數
0粉絲數
c****u
9 文章 | 0 粉絲
原創

在 Electron 應用中,獲取 Mac 的攝像頭和麥克風權限的兩種方式

2025-10-11 10:04:18
10
0

在使用 Electron 開發應用時,有很多時候需要音視頻聊天相關的業務,但是在 Mac 中,默認是獲取不到攝像頭和麥克風的權限的,在獲取攝像頭和麥克風權限之前,需要判斷是否已經獲取了權限,若是沒有,那么需要引導MAc用戶去系統設置中開啟權限。

1. 配置要獲取的權限

首先是在對應用打包時,要先聲明可能要使用的權限。先創建一個 entitlements.mac.plist 文件,內容如下:

 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "//www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.device.audio-input</key>
    <true/>
    <key>com.apple.security.device.camera</key>
    <true/>
  </dict>
</plist>

Electron 應用是使用的 electron-builder 構建的, electron-builder.json 需要添加如下配置:
{
  "mac": {
    "hardenedRuntime": true,
    "gatekeeperAssess": false,
    "entitlementsInherit": "build/entitlements.mac.plist",
    "extendInfo": {
      "NSDocumentsFolderUsageDescription": "需要訪問您的文檔目錄以展示相關文件",
      "NSDownloadsFolderUsageDescription": "需要訪問您的下載目錄以展示相關文件",
      "NSMicrophoneUsageDescription": "請允許訪問您的麥克風",
      "NSCameraUsageDescription": "請允許訪問您的攝像頭"
    }
  }
}

配置完成后,就可以在程序中索取需要的權限了

2. 獲取權限

音視頻通話前,仍然需要先判斷,是否已經獲取了權限。若沒有獲取權限,最好跳轉到設置頁面,讓用戶手動打開

在 electron 中,獲取權限的代碼如下:

import { ipcMain, systemPreferences } from "electron";

// 判斷是否有相關的權限
ipcMain.handle("getMediaAccess", (_, mediaType: "microphone" | "camera" | "screen") => {
  const access = systemPreferences.getMediaAccessStatus(mediaType) === "granted";
  logger.info(`get ${mediaType} access: ${access}`);
  return access;
});

// 索取權限
ipcMain.handle("askForMediaAccess", (_, mediaType: "microphone" | "camera") => {
  return systemPreferences.askForMediaAccess(mediaType);
});

// 打開設置頁
ipcMain.handle(
  "openSystemPreferences",
  (_, security: "Privacy_ScreenCapture" | "Privacy_Camera" | "Privacy_Microphone") => {
    if (os.platform() === "darwin") {
      const pane = "security";
      exec(`open "x-apple.systempreferences:com.apple.preference.${pane}?${security}"`);
    }
  }
);

在前端頁面中:

const handleClick = async (mediaType: "screen" | "camera" | "microphone") => {
  const access = await window.electronAPI?.ipcInvoke("getMediaAccess", mediaType);
  if (!access) {
    message.warning("暫無權限");
    const result = await window.electronAPI?.ipcInvoke("askForMediaAccess", mediaType);
    if (result) {
      return;
    }

    window.electronAPI?.ipcInvoke("openSystemPreferences", mapping[mediaType].system);
  }
};

 

 

3. 總結

Mac 的操作系統通常有更嚴格的管理權限機制,比如訪問攝像頭、麥克風、定位權限等等。在使用時,要考慮到授權的問題。

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0