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

Swift中创建Firebase动态链接报错:长链接无法解析

嘿,我一眼就揪出你代码里的核心问题了!生成的长链接格式错误,直接导致Firebase无法解析,咱们一步步来修复:

1. 致命错误:域名末尾的多余斜杠

你定义的动态链接域名末尾带了斜杠:

let dynamicLinkDomain = "https://a5481.app.goo.gl/"

这个斜杠会让DynamicLinkComponents生成出格式混乱的长链接:https://https://a5481.app.goo.gl//?link=xxx(注意双重https://和双重//),这就是Firebase报错的直接原因。

修复方法:去掉域名末尾的斜杠:

let dynamicLinkDomain = "https://a5481.app.goo.gl"

2. 优化冗余参数

你在params里同时设置了ibi、isi这类iOS跳转参数,后面又通过DynamicLinkIOSParameters重复配置,会导致链接里出现重复参数。建议把业务参数和平台参数分开,代码更清晰:

  • 只在params里保留业务相关参数:
let params:[String : String] = [
    "groupID":"-LDSfWKKbWjyrXiFljT3",
    "chatID":"-LDSfWKMbm9mSE2a6EIe"
]
  • iOS专属参数交给DynamicLinkIOSParameters处理:
let iOSParams = DynamicLinkIOSParameters(bundleID: appBundleID)
iOSParams.minimumAppVersion = "1.5"
iOSParams.appStoreID = "1222420082" // 对应原来的isi参数
iOSParams.enableForcedRedirect = true // 对应原来的efr=1
components.iOSParameters = iOSParams

完整修正后的代码

@IBAction func createGroupAction(_ sender: Any) {
    // 核心修复:去掉域名末尾的斜杠
    let dynamicLinkDomain = "https://a5481.app.goo.gl"
    let appBundleID = "com.vividapartments.myStr.com"
    
    // 仅保留业务相关参数,iOS跳转参数单独配置
    let params:[String : String] = [
        "groupID":"-LDSfWKKbWjyrXiFljT3",
        "chatID":"-LDSfWKMbm9mSE2a6EIe"
    ]
    
    let urlParams = params.flatMap ({ (key,value) -> String in
        return "\(key)=\(value)"
    }).joined(separator: "&")
    
    guard let deepLink = URL(string:"https://www.mystr.com/groups?\(urlParams)") else {return}
    print("deepLink is \(deepLink)")
    
    let components = DynamicLinkComponents(link: deepLink, domain: dynamicLinkDomain)
    
    // 配置iOS专属跳转参数
    let iOSParams = DynamicLinkIOSParameters(bundleID: appBundleID)
    iOSParams.minimumAppVersion = "1.5"
    iOSParams.appStoreID = "1222420082"
    iOSParams.enableForcedRedirect = true
    components.iOSParameters = iOSParams
    
    // 验证长链接格式
    if let longLink = components.url {
        print("The long link is \(longLink)")
        // 现在长链接格式应为:https://a5481.app.goo.gl/?link=xxx&ibi=xxx&imv=xxx&isi=xxx&efr=1
    }
    
    // 创建短链接
    let options = DynamicLinkComponentsOptions()
    options.pathLength = .unguessable
    components.options = options
    
    components.shorten { (shortURL, warnings, error) in
        if let error = error {
            print("error is \(error.localizedDescription)")
            return
        }
        if let shortURL = shortURL {
            print("shortURL is \(shortURL)")
        }
    }
}

额外验证建议

运行后先检查打印的longLink,确保格式是标准的https://xxx.app.goo.gl/?link=xxx,没有重复的协议头或多余斜杠。如果还有问题,可以把长链接复制到浏览器打开,Firebase会给出具体的错误提示帮你排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:40