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

Android WebView中DeepLink/Universal Link无法唤起目标应用求助

你的问题出在当前的shouldOverrideUrlLoading实现上——它强制所有URL都在WebView内部加载,完全没有区分普通链接和需要唤起外部应用的Universal Link/Deep Link。

修正思路是:先判断当前URL是否能被外部应用处理,能的话唤起目标应用,不能的话再在WebView内打开。以下是修正后的代码:

override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
    val uri = request.uri
    // 构造唤起外部应用的Intent
    val intent = Intent(Intent.ACTION_VIEW, uri)
    // 设置Flag,避免在Task栈中重复创建Activity
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    
    // 检查设备是否有能处理该Intent的应用
    val packageManager = view.context.packageManager
    val canHandle = intent.resolveActivity(packageManager) != null
    
    if (canHandle) {
        // 唤起外部应用
        view.context.startActivity(intent)
        return true
    } else {
        // 没有对应应用,在WebView内加载
        view.loadUrl(uri.toString())
        return true
    }
}

额外注意事项

  • 确保目标应用已正确配置Universal Link/Deep Link的关联:
    • 对于Deep Link,目标应用的AndroidManifest.xml中需要配置对应的<intent-filter>,包含ACTION_VIEW、CATEGORY_BROWSABLE和CATEGORY_DEFAULT,并指定对应的scheme和host。
    • 对于Universal Link,除了配置<intent-filter>,还需要在目标应用的服务器上放置assetlinks.json文件,完成域名验证。
  • 如果你的App需要优先处理某些特定域名的Universal Link,可以额外添加域名判断逻辑,比如:
    val targetDomains = setOf("example.com", "your-universal-link-domain.com")
    if (targetDomains.contains(uri.host)) {
        // 优先尝试唤起对应应用
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:15:34