Android webView 中的自定义 url 方案

Dan*_*Dan 6 android-webview bankid

当前状态是什么,您能否让 Android webView(不是浏览器/Chrome 自定义选项卡)解释具有自定义 url 方案的链接,例如“bankid:///?autostarttoken=xxxx-xxxxc&redirect=https://...”

这里的预期行为是 BankID 应用程序应该在加载链接时打开 - 而是获取“err_unknown_url_scheme”。有什么解决方法吗?或者是使用 Intent 的唯一方法?

尝试使用如下 Intent,它可以工作,但是重定向参数 url 会遇到问题,这会打开不需要的浏览器。将其替换为 app id/null 以保留在 webView/app 中,但随后无法在 webView 中获取预期的回调 url。

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

        String url = request.getUrl().toString();
        if(!url.startsWith("http") && !url.startsWith("https")) {
            Uri newUri = replaceUriParameter(Uri.parse(url), 
            "redirect", BuildConfig.APPLICATION_ID);

            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setData(newUri);

            startActivityForResult(intent, START_ACTIVITY_FOR_RESULT_LOGIN);
            view.reload();
            return true;
       }
}
Run Code Online (Sandbox Code Playgroud)

Sye*_*rah 0

这可能是一个迟到的答案,但可能对其他人有帮助。

您对于shouldOverrideUrlLoading 的方向是正确的 ,但您所需要的只是使用Intent,其余的将被处理。

这是解决方案的 kotlin 版本。

override fun shouldOverrideUrlLoading(
    view: WebView?,
    request: WebResourceRequest
): Boolean {
   val url = request.url.toString()
   if (url.isNotEmpty()) {
       if (URLUtil.isNetworkUrl(url)) {
            return false
       } else if (url.startsWith("bankid")){
                   val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
                  startActivity(intent)
             }
                     
   }
   return true
}
Run Code Online (Sandbox Code Playgroud)