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

iOS中通过Deep Link传递文档URL,如何在目标应用SceneDelegate提取?

解决Deep Link传递文档URL的解析问题

你已经能通过Deep Link启动目标应用,接下来只需要解析传入URL的查询参数,就能提取出原文档的URL,具体步骤和代码如下:

步骤说明

  1. 从URLContexts中拿到传入的Deep Link URL后,用URLComponents解析该URL的结构
  2. 从解析后的查询参数(queryItems)中找到键为url的参数值
  3. 对参数值进行URL解码(因为原文档URL的特殊字符在拼接时会被转义)
  4. 将解码后的字符串转换回URL类型,得到原文档的URL

修改后的SceneDelegate代码

extension SceneDelegate {
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let deepLinkUrl = URLContexts.first?.url else {
            return
        }
        
        // 解析Deep Link的URL组件
        guard let components = URLComponents(url: deepLinkUrl, resolvingAgainstBaseURL: false),
              let queryItems = components.queryItems else {
            print("无法解析Deep Link参数")
            return
        }
        
        // 查找key为"url"的查询参数
        guard let encodedDocUrlString = queryItems.first(where: { $0.name == "url" })?.value else {
            print("未找到文档URL参数")
            return
        }
        
        // 对编码后的字符串进行URL解码
        guard let decodedDocUrlString = encodedDocUrlString.removingPercentEncoding,
              let originalDocUrl = URL(string: decodedDocUrlString) else {
            print("文档URL解码失败")
            return
        }
        
        // 这里就拿到了原文档的URL,可以进行后续操作
        print("原文档URL:\(originalDocUrl.absoluteString)")
    }
}

额外注意点

  • 确保拼接Deep Link时,原文档URL的absoluteString已经被正确转义(你当前的代码直接拼接documenturl.absoluteString其实已经由系统自动处理了转义,但如果有特殊场景可以手动用addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)确保转义正确)
  • 处理参数不存在、解码失败等异常情况,避免应用崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:46:42