You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spotify在macOS Catalina的自定义协议疑问:无斜杠URI为何被Safari识别?

解决macOS Catalina中无斜杠自定义URI无法被Safari识别的问题

我之前折腾过类似的问题,Spotify那种spotify:track:2nI9BfzCrSWZnCkpF2Nn6O格式的无斜杠URI能被Safari直接识别跳转,确实是个特例——和常规自定义协议的配置细节有不少区别。你已经改了Info.plist但没效果,大概率是漏掉了下面这些关键点:

1. Info.plist里的完整URL Scheme配置

常规配置可能只加了CFBundleURLSchemes,但Spotify的配置里还有几个关键字段需要补上,才能让系统和Safari明确识别:

  • 确保CFBundleURLTypes数组里的字典包含LSHandlerRank并设为Owner,这个字段会让系统优先用你的App处理该Scheme,而不是直接丢去搜索。
  • 添加LSHandlerURLScheme字段,和你的Scheme名称对应。
  • 可选但推荐:加上LSHandlerRoleAll字段,指定你的App的Bundle ID,明确处理角色。

给你一个参考配置(把com.yourcompany.yourappyourapp换成你的实际信息):

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.yourapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>yourapp</string>
        </array>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSHandlerURLScheme</key>
        <string>yourapp</string>
        <key>LSHandlerRoleAll</key>
        <string>com.yourcompany.yourapp</string>
    </dict>
</array>

2. 遵循多段式的URI结构

Safari对无斜杠URI的识别有个潜规则:如果只是yourapp:singletext这种单段格式,很容易被当成搜索关键词;但像Spotify那样yourapp:category:identifier的多段结构,会被系统判定为合法的自定义URI。所以测试的时候别用单段的,试试yourapp:type:12345这种格式。

3. 重置LaunchServices的关联缓存

macOS会缓存URL Scheme和App的关联关系,你修改了Info.plist后,旧缓存可能还在生效。打开终端执行下面的命令重置缓存:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

执行完后重启Safari,必要的话重启电脑,确保缓存完全更新。

4. 检查Safari和系统的权限设置

  • 第一次用Safari打开你的自定义URI时,会弹出是否允许跳转的弹窗,如果之前误点了拒绝,需要去「系统偏好设置 → 安全性与隐私 → 隐私 → 自动化」里,确认Safari有权限打开你的App。
  • 另外检查Safari的「偏好设置 → 安全性」,确保没有勾选阻止自定义协议跳转的选项(不同版本表述可能略有不同)。

最后再测试一次

按照上面的配置改完、清完缓存、检查完权限后,把你的多段式URI(比如yourapp:track:abc123)粘贴到Safari地址栏,应该就能正常跳转了。

内容的提问来源于stack exchange,提问作者Zhenya

火山引擎 最新活动