You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绕过浏览器自定义协议限制,直接唤起macOS桌面应用?

macOS下绕过自定义协议唤起提示的实现方案

核心原理:利用macOS已验证域名机制

macOS允许开发者将应用签名证书与指定域名绑定,当这些域名发起自定义协议请求时,浏览器会直接信任并唤起应用,跳过「网站想要打开此应用」的权限提示。Slack、VSCode正是通过这一机制实现无提示唤起。

具体实现步骤

1. 为应用注册自定义协议

在应用的Info.plist文件中添加自定义协议配置,以myapp:为例:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLName</key>
    <string>My Custom App</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>myapp</string>
    </array>
  </dict>
</array>

2. 部署已验证域名配置文件

创建名为apple-app-site-association的JSON文件,内容如下(删除注释后部署):

{
  "applinks": {
    "details": [
      {
        "appIDs": [ "你的Apple团队ID.应用BundleID" ],
        "components": [
          {
            "/": "*"
          }
        ]
      }
    ]
  }
}
  • 将该文件部署到你的官方域名根目录或.well-known目录下(如https://yourdomain.com/.well-known/apple-app-site-association),必须通过HTTPS访问,不能有重定向,且MIME类型需设置为application/json。

3. 配置Apple开发者后台关联域名

  • 登录Apple开发者中心,进入应用ID的配置页面。
  • 开启「Associated Domains」功能,添加格式为applinks:yourdomain.com的关联域名(支持通配符,如applinks:*.yourdomain.com)。

4. 重新签名应用

使用包含「Associated Domains」权限的Provisioning Profile重新签名应用,确保应用能读取关联域名配置。

5. 浏览器端触发优化

在官方网站上通过JavaScript间接触发协议请求,配合信任机制确保无提示唤起:

function openCustomApp() {
  const targetUrl = 'myapp://path/to/action';
  const triggerIframe = document.createElement('iframe');
  triggerIframe.style.display = 'none';
  triggerIframe.src = targetUrl;
  document.body.appendChild(triggerIframe);

  setTimeout(() => {
    document.body.removeChild(triggerIframe);
  }, 100);
}

关键注意事项

  • 必须使用付费Apple开发者账号,个人免费账号无法启用「Associated Domains」功能。
  • 浏览器缓存可能影响配置生效,测试时建议使用隐私模式或清空缓存。
  • 主流浏览器(Safari、Chrome等)均支持该机制,但需注意不同浏览器的校验细节差异,需多端测试。

内容的提问来源于stack exchange,提问作者Gabriel Donadel Dall'Agnol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:32:16