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

iOS Universal Links触发后同时打开Safari与后台启动应用的问题排查求助

Universal Links启动后切后台、Safari打开页面的解决经验

我之前遇到过完全一模一样的问题!上下文菜单明明显示“打开[应用名称]”,但点击后应用闪一下就切后台,Safari直接跳转网页,折腾了好一阵才找到原因,给你分享几个排查和解决方向:

1. 检查应用内的链接处理方法

这是我当时踩的核心坑!如果没有正确实现链接处理方法,或者返回了false,系统会认为你的应用无法处理这个链接,直接 fallback 到Safari。

如果用的是AppDelegate,一定要确保这个方法正确处理Universal Link并返回true

// AppDelegate.swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        guard let url = userActivity.webpageURL else {
            return false
        }
        // 这里添加你的链接跳转逻辑,比如解析url跳转到对应页面
        print("处理Universal Link: \(url)")
        return true // 关键!返回true告诉系统应用已处理该链接
    }
    return false
}

如果是SceneDelegate模式:

// SceneDelegate.swift
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        guard let url = userActivity.webpageURL else { return }
        // 处理链接逻辑,比如跳转至APP内对应页面
    }
}

2. 核对apple-app-site-association文件细节

你的示例文件格式看起来没问题,但有几个点要再确认:

  • 路径规则"NOT /_/*", "/*"意味着排除/_/开头的所有路径,其他路径都匹配。如果你的测试链接正好是/_/开头的,那会被直接跳过走Safari。可以测试一个根路径的链接(比如https://yourdomain.com/test)看看是否正常。
  • Team ID和Bundle ID:确保appID里的TEAMID和Bundle ID和Xcode里的完全一致,包括大小写!哪怕一个字母写错都会导致匹配失败。
  • 文件格式与响应头:确认文件没有.json后缀,服务器返回的Content-Typeapplication/json。你可以用curl命令检查:
    curl -I https://yourdomain.com/apple-app-site-association
    
    如果返回的Content-Typetext/plain或者其他类型,需要在服务器配置里修改。

3. 检查Xcode项目配置

  • Associated Domains:确认Signing & Capabilities里的Associated Domains添加了applinks:yourdomain.com(不要加https://,不要加末尾的斜杠)。
  • Team匹配:项目选择的Team要和appID里的TEAMID完全一致,不要选错团队。

4. 清除设备缓存

iOS会缓存apple-app-site-association文件,旧缓存可能导致异常,试试这些方法:

  • 卸载应用后重新安装。
  • 打开Safari访问你的Universal Link,长按选择“在Safari中打开”,之后再长按链接选择“打开[应用名称]”试试。
  • 重启测试设备。

5. 服务器配置检查

  • 确保apple-app-site-association文件放在服务器根目录或者.well-known目录下,能直接通过https://yourdomain.com/apple-app-site-association访问到,没有重定向。
  • 服务器必须使用有效的SSL证书,自签名证书需要在测试设备上安装描述文件信任,否则系统会拒绝解析文件。

我当时就是因为在application(_:continue:restorationHandler:)里误返回了false,导致出现这个问题,修改后就正常了。你可以先检查这个方法,大概率能解决问题!

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

火山引擎 最新活动