如何检测Firebase DynamicLink已缩短?iOS重复缩短无报错问题
检测Firebase动态链接是否已缩短并避免重复缩短
针对iOS端Firebase Dynamic Links SDK不会主动检测传入链接是否为已缩短短链接的问题,可通过以下方式实现检测逻辑,避免重复缩短操作:
实现思路
- 基础格式校验:通过域名和路径格式快速判断是否符合Firebase短链接特征
- 可选API验证:若需要更高准确性,调用SDK缩短接口,通过返回的错误信息确认是否为已缩短链接
代码实现
基础检测函数
import FirebaseDynamicLinks func isFirebaseShortLink(url: URL, shortLinkPrefix: String) -> Bool { // 校验链接协议、域名是否匹配短链接前缀 guard let prefixURL = URL(string: shortLinkPrefix), url.scheme == prefixURL.scheme, url.host == prefixURL.host else { return false } // 校验路径结构:Firebase短链接路径通常为单个10-20位的随机字符串 let pathParts = url.pathComponents return pathParts.count == 2 && pathParts[1].count >= 10 }
完整使用示例
let targetURL = URL(string: "https://joyone.page.link/pXJG7y5kLPgxoTyg6?title=Klub+Innowator%C3%B3w+OPZZ")! let shortLinkPrefix = "https://joyone.page.link" if isFirebaseShortLink(url: targetURL, shortLinkPrefix: shortLinkPrefix) { print("该链接已是Firebase短动态链接,无需重复缩短") } else { // 执行正常缩短流程 DynamicLinkComponents(link: targetURL, domainURIPrefix: shortLinkPrefix)?.shorten { shortenedURL, _, error in if let error = error { print("缩短失败:\(error.localizedDescription)") } else if let url = shortenedURL { print("缩短完成:\(url)") } } }
进阶API验证(可选)
如果需要确保链接是有效的Firebase动态链接(而非仅格式匹配),可以调用shortenURL方法,通过错误信息判断:
func verifyIfShortLink(url: URL, completion: @escaping (Bool) -> Void) { DynamicLinkComponents.shortenURL(url, options: nil) { _, _, error in // 若错误信息包含"Cannot shorten a short Dynamic Link",则为已缩短链接 let isShortLink = error?.localizedDescription.contains("Cannot shorten a short Dynamic Link") == true completion(isShortLink) } } // 使用示例 verifyIfShortLink(url: targetURL) { isShortLink in if isShortLink { print("已确认是Firebase短动态链接") } else { // 执行缩短操作 } }
说明
- 基础格式校验无需网络请求,适合大多数场景,能快速过滤重复缩短的情况
- 进阶API验证需要网络请求,准确性更高,但会增加耗时,可根据业务需求选择
内容的提问来源于stack exchange,提问作者kunass2
相关产品推荐
相关产品推荐

