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
相关产品推荐
相关产品推荐

