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

Android WebView中如何设置redirect_uri跳转至指定Activity

解决方案

要实现验证完成后跳转回指定Activity,你需要通过自定义协议拦截WebView的跳转请求,具体步骤如下:

1. 修改redirect_uri为自定义协议

把原有的https://www.example.com替换为自定义协议(比如myapp://callback),验证服务完成后会跳转到这个自定义地址:

var url = "https://sandbox.com/api?redirect_uri=myapp://callback";

2. 拦截自定义协议并跳转Activity

在WebViewClient的shouldOverrideUrlLoading方法中,检测到自定义协议的URL时,启动目标Activity并阻止WebView继续加载该地址:

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, urlNewString: String?): Boolean {
        urlNewString?.let {
            // 拦截自定义协议跳转
            if (it.startsWith("myapp://")) {
                // 启动目标Activity(替换成你要跳转的Activity类)
                val intent = Intent(this@YourCurrentActivity, TargetActivity::class.java)
                
                // 可选:从回调URL中解析验证参数(比如token)并传递给目标Activity
                val uri = Uri.parse(it)
                val authToken = uri.getQueryParameter("token")
                intent.putExtra("auth_token", authToken)
                
                startActivity(intent)
                // 可选:关闭当前WebView所在的Activity
                finish()
                return true // 告诉WebView已处理该跳转,无需继续加载
            }
        }
        return super.shouldOverrideUrlLoading(view, urlNewString)
    }

    override fun onPageFinished(view: WebView?, url: String?) {
        if (pDialog.isShowing()) {
            pDialog.dismiss() // 补充关闭加载弹窗的逻辑
        }
    }
}

3. 特殊情况处理(如果验证服务只支持HTTPS的redirect_uri)

如果验证服务要求redirect_uri必须是HTTPS地址,你可以:

  • 搭建一个简单的后端接口,当验证服务回调到该HTTPS接口时,后端再重定向到你的自定义协议地址(比如myapp://callback?token=xxx)
  • 或者和验证服务提供商协商,允许使用自定义协议作为redirect_uri

内容的提问来源于stack exchange,提问作者Enamul Haque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:20:48