Проблема при загрузке URL в веб-браузере Android - PullRequest
0 голосов
/ 01 марта 2019

Мне нужно показать ссылку на веб-страницу входа в веб-представлении, и эта ссылка выглядит примерно так:

url = "https://test-dev.test.com/as/authorization.oauth2?client_id=com.test.td&response=code&value=id test mail&redirect_uri=com.test.ap://oauth2/test"; 

[Изменен фактический URL-адрес под разными именами]

На этой странице мы имеемввести имя пользователя и пароль.Нажав на логин, вы попадете на экран OTP, после ввода результата OTP будет URL-ответ, и из этого мне нужно прочитать код.Используя этот код, я должен сделать запрос на получение токена аутентификации для сеанса.Для запроса токена ответом будет Json.

Теперь мне нужна помощь в решении следующих вопросов:

  1. В настоящее время он открывается в браузере, а не в веб-просмотре.Но другие ссылки открываются в веб-просмотре внутри приложения, кроме ссылки выше.
  2. Это метод обратного вызова для обработки ответа от этой транзакции.

Ниже приведен мой код:

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new MyWebViewClient());
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    webView.loadUrl(getAuthorizationURL());
    webView.setHorizontalScrollBarEnabled(false);
    webView.setWebContentsDebuggingEnabled(true);
    //  webView.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");    
}


    private String getAuthURL() {
    Uri.Builder builder = new Uri.Builder();
    builder.scheme("https")
            .authority("test-dev.test.com")
            .appendPath("ta/authorization.oauth2")
            .appendQueryParameter("client_id", "com.test.td")
            .appendQueryParameter("response", "code")
            .appendQueryParameter("value", "id test mail").appendQueryParameter("redirect_uri", "com.test.ap://oauth2/test")

    String url = Uri.decode(builder.build().toString());

    //url = "https://www.google.com/";
    // url = "https://developers.google.com/webmaster-tools/search-console-api/about";

    return url;
}


 private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView webView, String url) {

        System.out.println(" shouldOverrideUrlLoading :============ " + Uri.parse(url).getHost() + " url " + url);

        //            if(url.contains("dev.test.com")){
        //                webView.loadUrl(url);
        //                return false;
        //            }
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(i);
        return true;
    }
}

1 Ответ

0 голосов
/ 01 марта 2019

Похоже, вы выполняете аутентификацию OpenID.Вы реализуете shouldOverrideUrlLoading(), который вызывает намерение, которое, скорее всего, перейдет в веб-браузер по умолчанию, и возвращает true.Возвращаемое значение сообщает Android, управляете ли вы загрузкой страницы (true) или оставляете ее для просмотра в Интернете (false).Если вы не берете на себя управление обработкой URL-адреса, веб-представление попытается загрузить его как обычную страницу.

Вы также сразу же направляете веб-представление на URL-адрес авторизации в коде onCreate.,Я думаю, что это является частью путаницы по поводу поведения навигации, которое вы видите.

Для такого рода процесса аутентификации вы не хотите отменять загрузку страницы OTP.Пусть веб-просмотр обрабатывает это так же, как и все остальное.Что вы хотите сделать, это захватить ответ URL.Ваш оператор if в shouldOverrideUrlLoading должен перехватить URL-адрес ответа, использовать его содержимое и ответить true, чтобы веб-представление узнало, что вы позаботились об этом URL-адресе.Все остальное должно обрабатываться веб-представлением.

Наконец, закомментированная версия кода выглядит для меня так, будто она отправит вас в бесконечный цикл, как вы его написали.Вы говорите веб-представлению загрузить URL-адрес авторизации, который вернется к коду вашего веб-клиента, который перехватит URL-адрес, заставив его загрузить URL-адрес ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...