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

通过deep linking从浏览器打开iOS/Android应用时如何传递数据

你需要先和移动端开发约定好Deep Link的路径、参数规则,把需要传递的数据放在URI的路径或者查询参数中,示例格式如下:

# 自定义Scheme格式
myapp://tab/3?product_id=12345
# Universal Link/安卓App Link格式
https://yourdomain.com/tab/3?product_id=12345

上述示例中/tab/3表示跳转到第4个标签页(下标从0开始),product_id=12345是额外传递的业务参数。

安卓端数据解析与页面跳转逻辑

在你配置了Deep Link入口的Activity(通常是首页Activity)中,添加URI解析逻辑,在onCreate和onNewIntent生命周期中读取传入的Intent数据:

private fun handleDeepLink() {
    intent.data?.let { uri ->
        // 提取路径判断要跳转的页面
        val pathSegments = uri.pathSegments
        if (pathSegments.firstOrNull() == "tab") {
            val tabIndex = pathSegments.getOrNull(1)?.toIntOrNull() ?: 0
            // 选中对应标签
            viewPager.currentItem = tabIndex
            // 提取额外参数
            val productId = uri.getQueryParameter("product_id")
            // 如果需要在对应标签页内跳转子页面,继续传递参数即可
        }
    }
}

// 应用冷启动从Deep Link打开时在onCreate调用
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ... 其他初始化逻辑
    handleDeepLink()
}

// 应用在后台存活时从Deep Link打开时调用
override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    setIntent(intent)
    handleDeepLink()
}

iOS端数据解析与页面跳转逻辑

根据你使用的是自定义Scheme还是Universal Link,在对应的回调方法中获取传入的URL,统一解析后执行跳转:

// 统一处理Deep Link逻辑
func handleDeepLink(url: URL) {
    guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return }
    let pathSegments = components.pathComponents
    // 匹配标签跳转规则
    if pathSegments.contains("tab") {
        guard let index = pathSegments.firstIndex(of: "tab"), index + 1 < pathSegments.count else { return }
        guard let tabIndex = Int(pathSegments[index + 1]) else { return }
        // 选中对应标签页
        tabBarController.selectedIndex = tabIndex
        // 提取查询参数
        let productId = components.queryItems?.first { $0.name == "product_id" }?.value
        // 传递参数到对应标签页,执行子页面跳转逻辑
    }
}

// 自定义Scheme回调
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    handleDeepLink(url: url)
    return true
}

// Universal Link回调
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else {
        return false
    }
    handleDeepLink(url: url)
    return true
}

用户上传的示例代码参考:
sample code

注意事项

  • 所有路径规则、参数命名需要调用方和移动端提前约定一致,避免解析失败
  • 要做好异常兼容:如果路径匹配失败、参数格式错误,默认留在首页即可,不要出现崩溃
  • 如果应用已经在后台运行,不要重新初始化首页,直接在现有页面栈的基础上执行跳转,安卓端可以给入口Activity配置singleTask启动模式避免重复创建实例
  • 如果需要跳转到标签页下的二级子页面,拿到参数后直接在对应标签页的导航栈中push对应的页面即可

内容的提问来源于stack exchange,提问作者Arunraj A V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:15:05