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

已配置Universal Link但无法正常工作的技术求助

问题现象

已完成Apple深层Universal Link的全部配置,但通过备忘录测试URL或AirDrop将链接拖到安装了目标应用的设备时,链接会在Safari中打开,且未触发以下代理方法:

(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    NSLog(@"application openURL: %@", url);
    return true;
}

已完成的配置

  • 在「Signing & Capabilities」标签页中,将域名添加到App Transport Security(ATS)例外:
    applinks:MyDomain.com?mode=developer
    
    注:MyDomain.com是支持HTTPS的可用域名
  • 为应用标识符启用「Associated Domains」,并使用了应用Bundle Identifier对应的App ID前缀
  • 已在https://<fully qualified domain>/.well-known/apple-app-site-association位置部署apple-app-site-association文件,内容如下:
    {
      "applinks": {
          "details": [
               {
                 "appIDs": [ "MyAppIdentifer.MyBundleIdentifer" ],
                 "paths": [
                    "*"
                 ],
                 "components": [
                   {"/": "/*"}
                 ]
               }
           ]
       }
    }
    
  • 已通过AASA验证工具验证该文件(使用应用标识符、Bundle Identifier和域名)

异常发现

检查Apple CDN时,发现存在该文件的旧版本(缺少应用标识符前缀):

curl https://app-site-association.cdn-apple.com/a/v1/MyDomain.com

返回内容:

{
  "applinks": {
      "details": [
           {
             "appIDs": [ "MyBundleIdentifer" ],
             "paths": [
                "*"
             ],
             "components": [
               {"/": "/*"}
             ]
           }
       ]
   }
}

注:已使用mode=developer标识且应用处于调试模式,理论上应直接从域名获取最新的apple-app-site-association文件,且该文件已能被Apple服务器识别,但问题仍存在


排查与解决建议

  1. 清理本地缓存与重装应用
    即使开启mode=developer,设备仍可能存在旧缓存。尝试:

    • 重启设备并清除Safari浏览器缓存
    • 完全卸载应用后重新安装,确保应用签名与Associated Domains配置完全匹配
  2. 修正AASA文件的AppID格式
    appIDs的正确格式为TeamID.BundleID,确认MyAppIdentifer是Apple Developer后台中对应的Team ID(可在「Certificates, Identifiers & Profiles」页面查看)。若Team ID填写错误,即使文件部署正确也无法匹配应用。

  3. 强制刷新Apple CDN缓存
    修改apple-app-site-association文件内容(比如添加一个空格)后重新部署,触发Apple服务器重新抓取最新文件;也可通过开发者后台的Associated Domains相关工具手动发起刷新请求。

  4. 补充实现正确的代理方法
    iOS 13+中,Universal Link跳转优先触发application:continueUserActivity:restorationHandler:方法,而非application:openURL:options:。需补充实现该方法:

    - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
        if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
            NSURL *url = userActivity.webpageURL;
            NSLog(@"Universal Link opened: %@", url);
            // 处理跳转逻辑
        }
        return YES;
    }
    
  5. 验证ATS例外配置
    确认ATS例外中的域名格式正确,不要携带https://或路径,需与AASA文件部署的域名完全一致。

  6. 更换测试方式
    避免直接在备忘录中点击链接(可能存在系统缓存),可尝试:

    • 在Safari中输入链接,下拉页面查看是否出现「在[应用名]中打开」的选项
    • 使用命令xcrun simctl openurl <deviceUDID> <yourUniversalLink>在模拟器中测试跳转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:49