使用 electron-builder 向 macOS info.plist 添加协议的正确方法是什么?
What is the correct way add a protocol to the macOS info.plist using electron-builder?
我需要能够从浏览器启动我的 Electron 应用程序(就像登录 Slack 一样)。我知道我可以在 Electron 中使用 app.setAsDefaultProtocolClient(protocol[, path, args]) 将我的协议名称添加到我的 Electron 应用程序中。
然后在 electron-builder 中,我可以使用 package.json 配置 build.mac
和 extendInfo
属性 来定义“[=23 的额外条目=]”。然而,这是文档给出的关于如何使用它的唯一说明。
使用 electron 和 electron-builder 配置 build.mac.extendInfo
将协议添加到 macOS info.plist 并能够按照描述使用它的正确方法是什么?
此问题与如何使用自定义方案接收 OAuth 响应有关,如我的代码示例中所示,您可以在本地 运行,然后使用深度链接等:
兴趣点:
- 浏览器应用程序的插页式网页 returns 控件 - 请参阅 this page
- 我的 package.json 公开了 Electron 部署方案
这应该可以让您进行比较。这是关键代码:
插页式网页调用应用程序
window.addEventListener('DOMContentLoaded', function() {
var redirectUri = 'x-mycompany-desktopapp:/callback';
if (window.location.search) {
redirectUri += window.location.search;
}
document.getElementById('continueButton').onclick = function() {
window.location.href = redirectUri;
};
}
注册计划
这被 Electron 打包器拾取并包含在平台特定的二进制文件中,导致 OS 特定注册:
"build": {
"protocols": {
"name": "finaldesktopapp",
"schemes": [
"x-mycompany-desktopapp"
]
}
},
正在接收通知
这使得以下代码能够在应用程序的主端运行,如 main.ts
文件中所指定:
app.setAsDefaultProtocolClient(this._configuration.oauth.privateSchemeName);
最后,您注册了一个可以解析 URL 的回调并采取任何适当的操作 - 在我的例子中完成登录。
private _receiveNotificationInRunningInstance(privateSchemeUrl: string) {
}
机制有点棘手,在 macOS 和 Windows / Linux 上接收通知的方式不同。请参阅 this source file 及其解释详细信息的注释。
(代表问题作者发布解决方案,将其移至答案space).
它现在适用于以下内容 - 我已将其添加到我的 Electron package.json:
"protocols": {
"name": "my-app",
"schemes": [
"my-app"
]
},
"mac": {
"target": "dmg",
"extendInfo": "my-app"
},
我在 electron.js 中有这个:
app.setAsDefaultProtocolClient('my-app');
在我的 React 浏览器客户端应用程序代码中从浏览器启动应用程序:
document.location = 'my-app://open?url='
我需要能够从浏览器启动我的 Electron 应用程序(就像登录 Slack 一样)。我知道我可以在 Electron 中使用 app.setAsDefaultProtocolClient(protocol[, path, args]) 将我的协议名称添加到我的 Electron 应用程序中。
然后在 electron-builder 中,我可以使用 package.json 配置 build.mac
和 extendInfo
属性 来定义“[=23 的额外条目=]”。然而,这是文档给出的关于如何使用它的唯一说明。
使用 electron 和 electron-builder 配置 build.mac.extendInfo
将协议添加到 macOS info.plist 并能够按照描述使用它的正确方法是什么?
此问题与如何使用自定义方案接收 OAuth 响应有关,如我的代码示例中所示,您可以在本地 运行,然后使用深度链接等:
兴趣点:
- 浏览器应用程序的插页式网页 returns 控件 - 请参阅 this page
- 我的 package.json 公开了 Electron 部署方案
这应该可以让您进行比较。这是关键代码:
插页式网页调用应用程序
window.addEventListener('DOMContentLoaded', function() {
var redirectUri = 'x-mycompany-desktopapp:/callback';
if (window.location.search) {
redirectUri += window.location.search;
}
document.getElementById('continueButton').onclick = function() {
window.location.href = redirectUri;
};
}
注册计划
这被 Electron 打包器拾取并包含在平台特定的二进制文件中,导致 OS 特定注册:
"build": {
"protocols": {
"name": "finaldesktopapp",
"schemes": [
"x-mycompany-desktopapp"
]
}
},
正在接收通知
这使得以下代码能够在应用程序的主端运行,如 main.ts
文件中所指定:
app.setAsDefaultProtocolClient(this._configuration.oauth.privateSchemeName);
最后,您注册了一个可以解析 URL 的回调并采取任何适当的操作 - 在我的例子中完成登录。
private _receiveNotificationInRunningInstance(privateSchemeUrl: string) {
}
机制有点棘手,在 macOS 和 Windows / Linux 上接收通知的方式不同。请参阅 this source file 及其解释详细信息的注释。
(代表问题作者发布解决方案,将其移至答案space).
它现在适用于以下内容 - 我已将其添加到我的 Electron package.json:
"protocols": {
"name": "my-app",
"schemes": [
"my-app"
]
},
"mac": {
"target": "dmg",
"extendInfo": "my-app"
},
我在 electron.js 中有这个:
app.setAsDefaultProtocolClient('my-app');
在我的 React 浏览器客户端应用程序代码中从浏览器启动应用程序:
document.location = 'my-app://open?url='