6

当前状态是什么,您能否让 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;
       }
}
4

1 回答 1

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
}
于 2022-02-24T13:48:25.667 回答