使用 electron-builder 向 macOS info.plist 添加协议的正确方法是啥?
Posted
技术标签:
【中文标题】使用 electron-builder 向 macOS info.plist 添加协议的正确方法是啥?【英文标题】:What is the correct way add a protocol to the macOS info.plist using electron-builder?使用 electron-builder 向 macOS info.plist 添加协议的正确方法是什么? 【发布时间】:2022-01-01 22:47:33 【问题描述】:我需要能够从浏览器启动我的 Electron 应用程序(就像登录 Slack 一样)。我知道我可以在 Electron 中使用 app.setAsDefaultProtocolClient(protocol[, path, args]) 将我的协议名称添加到我的 Electron 应用程序中。
然后在electron-builder 中,我可以使用带有extendInfo
属性的package.json 配置build.mac
来定义“Info.plist 的额外条目”。然而,这是文档给出的关于如何使用它的唯一说明。
使用 electron 和 electron-builder config build.mac.extendInfo
向 macOS info.plist 添加协议并能够按照描述使用它的正确方法是什么?
【问题讨论】:
【参考方案1】:(代表问题作者发布解决方案,将其移至答案空间)。
它现在适用于以下内容 - 我已将其添加到我的 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='
【讨论】:
【参考方案2】:这个问题与如何使用自定义方案来接收 OAuth 响应有关,就像我的代码示例一样,您可以在本地运行,然后使用深度链接等:
Code Blog Post兴趣点:
插页式网页将控制权返回给浏览器应用程序 - 请参阅 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 打包程序提取并包含在特定于平台的二进制文件中,从而导致特定于操作系统的注册:
"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 及其 cmets 来解释详细信息。
【讨论】:
嗨@Gary Archer,非常感谢您的回答,一旦我有时间深入了解您提供的所有链接,我会回到这里! 这看起来很有帮助,但它完全是一个“仅链接的答案”。能不能把一些内容带进去,这样任何链接断开都不会影响到它? 感谢 Gary 的编辑 - 非常有帮助。 (少量反馈 - 您可以在 Markdown 中使用一种标题样式,为搜索引擎和屏幕阅读器提供语义/结构信息:在标题文本下使用---
)。
感谢halfer - 欢迎随时提供反馈...以上是关于使用 electron-builder 向 macOS info.plist 添加协议的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 electron-builder 向 macOS info.plist 添加协议的正确方法是啥?
用electron将Vue项目打包为window和Mac桌面应用 (electron-packager与electron-build)
Electron 和 TypeScript (electron-builder):“不能在模块外使用 import 语句”