能否将网站链接作为URL Scheme实现iOS App Deeplink?
iOS DeepLink 实现问题解答
核心结论
不能把网站基础URL作为URL Scheme使用。URL Scheme是自定义的协议头(比如myapp://),和HTTP/HTTPS不属于同一体系,你用的website.com/product这类域名格式,系统会直接当成网页链接交给浏览器处理,根本不会触发App的跳转逻辑。
你的需求应该用Universal Links(通用链接)
你要让现有的HTTPS产品URL直接打开App,这正是Universal Links的设计场景,具体步骤如下:
1. 配置网站端的Apple验证文件
- 创建一个名为
apple-app-site-association的无后缀JSON文件,内容参考:
{ "applinks": { "apps": [], "details": [ { "appID": "你的团队ID.App的BundleID", "paths": [ "/product/details/*" ] } ] } }
把
你的团队ID替换为Apple开发者后台的Team ID,App的BundleID就是你项目中设置的Bundle Identifierpaths里的/product/details/*表示匹配所有产品详情页的URL路径将该文件上传至你的网站根目录(
https://www.mywebsite.com/apple-app-site-association)或.well-known子目录,必须确保能通过HTTPS直接访问,且无重定向。
2. 在Xcode中开启App的Universal Links支持
- 打开项目的
Signing & Capabilities页面,添加Associated Domains能力 - 在该能力下添加条目:
applinks:www.mywebsite.com(前缀必须是applinks:,后面紧跟你的域名)
3. 在App内处理跳转逻辑
- 针对iOS 13及以上系统,在
SceneDelegate中实现回调:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let webpageURL = userActivity.webpageURL else { return } // 从URL中提取产品ID(比如xxxx) if let productID = webpageURL.pathComponents.last { // 编写跳转到App内产品详情页的逻辑 } }
- 针对iOS 12及以下系统,在
AppDelegate中实现回调:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let webpageURL = userActivity.webpageURL else { return false } if let productID = webpageURL.pathComponents.last { // 处理跳转逻辑 } return true }
补充:为什么之前的URL Scheme尝试无效?
URL Scheme必须以自定义协议开头(比如myapp://product/details/123),用户点击这类链接才会触发App跳转。你用的website.com/product是域名的一部分,系统会默认识别为HTTP/HTTPS协议链接,直接打开浏览器,和URL Scheme机制完全不兼容。
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

