Swift中创建Firebase动态链接报错:长链接无法解析
问题解决:Firebase动态链接提示"Long link is not parsable"
嘿,我一眼就揪出你代码里的核心问题了!生成的长链接格式错误,直接导致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
相关产品推荐
相关产品推荐

