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

iOS 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:43:25