iOS Universal Link安装后跳转指定页面及传值问题排查
Universal Link 配置问题排查与解决方案
这个场景是完全支持的,你逻辑未生效大概率是遗漏了关键配置或参数传递步骤,以下是具体检查点和解决方法:
一、先确认基础配置是否到位
- apple-app-site-association 文件校验
- 得把文件放在域名的
.well-known目录下(根目录也可以,但官方推荐前者),用HTTPS访问必须正常,不能有重定向,MIME类型得是application/json - 文件里的
appIDs必须是TeamID.BundleID格式,比如ABCDE12345.com.yourapp.demo,别写错TeamID或BundleID paths字段要包含你用的Universal Link路径,比如/product/*或者具体路径,通配符别乱用
- 得把文件放在域名的
- Xcode 项目配置检查
- 在项目的
Signing & Capabilities里添加Associated Domains,格式是applinks:yourdomain.com(别加http/https前缀) - 确保项目的Bundle ID、Team ID和apple-app-site-association文件里的完全一致
- 必须用真机测试,模拟器对Universal Link的支持有问题
- 在项目的
二、未安装App时跳转App Store的逻辑
Universal Link本身不会自动跳App Store,得在你的网页端做处理:
- 用户点击链接且未安装App时,系统会打开Universal Link对应的网页,你要在这个网页里判断:如果是iOS设备,自动跳转到App Store链接(格式是
itms-apps://itunes.apple.com/app/id你的AppID);其他设备就展示引导页面 - 重点:跳转时要把Universal Link里的参数保留好,这是安装后能拿到参数的前提
三、安装后获取参数并跳转的核心逻辑
这是你最可能遗漏的步骤,iOS不会自动保存安装前的Universal Link参数,得通过网页端+App端配合实现:
方案1:用Smart App Banner传递参数
在你的Universal Link对应的网页里添加这段代码,把参数放到app-argument里:
<meta name="apple-itunes-app" content="app-id=你的AppID, app-argument=要传递的参数内容">
用户通过这个Banner安装App后,首次启动时,app-argument会通过启动参数传递给App,你需要在App的启动逻辑里解析:
// AppDelegate(iOS 12及以下) func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if let userActivityDict = launchOptions?[.userActivityDictionary] as? [String: Any], let userActivity = userActivityDict["UIApplicationLaunchOptionsUserActivityKey"] as? NSUserActivity, userActivity.activityType == NSUserActivityTypeBrowsingWeb, let appArgument = userActivity.userInfo?["apple-app-site-association"] as? String { // 解析参数,跳转对应页面 handleDeepLink(with: appArgument) } return true } // SceneDelegate(iOS 13+) func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { if let userActivity = connectionOptions.userActivities.first, userActivity.activityType == NSUserActivityTypeBrowsingWeb, let appArgument = userActivity.userInfo?["apple-app-site-association"] as? String { handleDeepLink(with: appArgument) } }
方案2:服务器端存储参数
如果不想用Smart App Banner,也可以这么做:
- 用户点击Universal Link时,先跳转到你的中间网页,把参数和用户设备标识(比如IDFA、Cookie)绑定后存在服务器
- 然后中间页再跳转到App Store引导安装
- App首次启动时,调用接口向服务器请求当前设备绑定的参数,拿到后跳转对应页面
四、通用失效排查技巧
- 把测试设备上的App删掉,重启设备(iOS会缓存Universal Link配置,重启能清缓存)
- 用命令行
curl -v https://yourdomain.com/.well-known/apple-app-site-association检查文件是否能正常获取,内容格式是否正确 - 确认你的域名没被其他App注册过Universal Link,同一域名只能绑定一个App
- 测试时别用短链接,直接用完整的Universal Link,避免跳转过程中参数丢失
内容的提问来源于stack exchange,提问作者Vignesh
相关产品推荐
相关产品推荐

