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

Android:如何从Firebase Dynamic Link中提取Table ID数据

我之前做过类似的游戏邀请功能,刚好能帮到你!下面是完整的技术解决方案,涵盖链接生成、参数解析和常见坑点排查:

解决方案:为Firebase动态链接附加并解析Table ID

一、生成携带Table ID的邀请链接

核心是把唯一Table ID作为自定义参数嵌入动态链接中,以下是两种常用实现方式:

1. 客户端SDK直接生成(以Android/Kotlin为例)

用Firebase Dynamic Links SDK创建链接时,直接将Table ID拼接在自定义跳转链接里:

// 替换为你的实际桌台ID
val targetTableId = "table_123456"
val dynamicLink = Firebase.dynamicLinks.dynamicLink {
    // 核心:把Table ID作为参数放在自定义链接里
    link = Uri.parse("https://yourapp.com/join?tableId=$targetTableId")
    // 替换为你的Firebase动态链接域名(控制台获取)
    domainUriPrefix = "https://yourapp.page.link"
    
    // 配置唤起应用的平台参数
    androidParameters {
        packageName = "com.yourgame.package"
    }
    iosParameters {
        bundleId = "com.yourgame.ios"
    }
}
// 生成的链接可直接用于分享
val shareableLink = dynamicLink.uri.toString()

2. 控制台模板+客户端填充参数

如果需要复用链接模板,先在Firebase控制台创建模板:

  • 进入动态链接页面,新建模板,在「链接」字段填写https://yourapp.com/join?tableId={tableId}(用占位符标记参数位置)
  • 保存模板后,客户端调用时替换占位符:
val templateUrl = Uri.parse("https://yourapp.page.link/join-template")
val filledLink = templateUrl.toString().replace("{tableId}", targetTableId)
// 再用SDK封装成动态链接(代码同上面的SDK生成逻辑)

二、在被邀请者应用中解析Table ID

用户点击链接唤起应用后,需要在启动逻辑中捕获动态链接并提取参数:

1. Android端解析(适配前台/后台唤起)

在启动页或主Activity中添加逻辑:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    handleDynamicLink(intent)
}

// 处理后台唤起的情况
override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    intent?.let { handleDynamicLink(it) }
}

private fun handleDynamicLink(intent: Intent) {
    Firebase.dynamicLinks.getDynamicLink(intent)
        .addOnSuccessListener { pendingData ->
            pendingData?.link?.let { deepLink ->
                // 提取Table ID参数
                val tableId = deepLink.getQueryParameter("tableId")
                tableId?.let {
                    // 直接跳转到对应桌台页面
                    navigateToTableScreen(it)
                }
            }
        }
        .addOnFailureListener { e ->
            Log.w("DynamicLinks", "解析链接失败", e)
        }
}

2. iOS端解析(适配SceneDelegate)

在SceneDelegate中处理链接唤起:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else { return }
    processDynamicLink(url: url)
}

// 处理后台唤起的通用链接
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    if let url = userActivity.webpageURL {
        processDynamicLink(url: url)
    }
}

private func processDynamicLink(url: URL) {
    FirebaseDynamicLinks.dynamicLinks().handleUniversalLink(url) { link, error in
        guard let deepLink = link?.url else { return }
        // 提取Table ID
        if let tableId = deepLink.queryParameters?["tableId"] {
            // 跳转至桌台页面
            navigateToTableScreen(tableId: tableId)
        }
    }
}

三、常见坑点排查

  • 域名绑定验证:确保Firebase控制台中动态链接域名已与应用包名/Bundle ID完成绑定,否则参数可能无法正常传递
  • 避免保留字段:自定义参数不要用link、apn、ibi等Firebase内置字段,推荐用tableId这类业务化命名
  • 真机测试优先:模拟器可能存在动态链接解析异常,尽量用真机测试,同时确保Firebase SDK为最新版本
  • 未安装应用的兼容:如果用户未安装应用,动态链接会跳转到你配置的网页,可在网页中解析tableId,提示用户安装后进入对应桌台

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:12:24