WebView не принимает некоторые куки - PullRequest
0 голосов
/ 07 октября 2018

Я загружаю веб-сайт в Webview, который использует некоторые куки для хранения сессии.Я написал следующие строки, чтобы принимать куки

CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    CookieManager.setAcceptFileSchemeCookies(true);
    CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}
webView.loadUrl("https://www.irctc.co.in/nget/train-search");

На одном этапе (после оплаты через платежный шлюз) вызывается метод shouldOverrideUrlLoading, после чего он должен попасть на страницу успеха транзакции, но продолжает работатьна страницу входа.Это мой метод:

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    Log.d(TAG, "The URL is loaded in webview itself");
    return false;
}

Используя Chrome Developer Tools, я вижу следующие файлы cookie для веб-сайта Cookies used by website

Когда я вызываю метод CookieManager.getInstance().getCookie(url), я могуобратите внимание, что файлы cookie JESESSIONID и SLB_Cookie присутствуют в веб-просмотре, но не уверены в том, что Локальное хранилище cookie.Кроме того, если я удаляю файл cookie Local Storage в Chrome, я получаю ту же самую страницу (страницу входа в систему) вместо страницы успеха транзакции, как WebView.Поэтому я думаю, что если каким-либо образом я проверю, присутствует ли файл cookie локального хранилища в веб-просмотре или нет, и если нет, то, если я добавлю его, моя работа будет выполнена.Но я не могу выполнить ни одну из этих задач.

1 Ответ

0 голосов
/ 09 октября 2018

Если вы хотите передать свои данные для входа в систему в файл cookie в Webview, сделайте это следующим образом. На днях мне пришлось передать свой объект входа в систему по определенному URL следующим образом.

            WebSettings settings = webViewRoi.getSettings();
            settings.setDomStorageEnabled(true);
            settings.setJavaScriptEnabled(true);
            settings.setJavaScriptCanOpenWindowsAutomatically(false);
            settings.setAppCacheEnabled(true);
            settings.setAllowUniversalAccessFromFileURLs(true);
            settings.setAllowFileAccessFromFileURLs(true);

            Gson gson = new GsonBuilder().disableHtmlEscaping().create();


            FormsDTO formsDTO = new FormsDTO();
            FormsDTOProfile dtoProfile = new FormsDTOProfile(LoginActivity.loginInfoDTO.getProfile());
            formsDTO.setProfile(dtoProfile);
            formsDTO.setAuthorized(true);
            formsDTO.setToken(LoginActivity.loginInfoDTO.getToken());

            String out123 = gson.toJson(formsDTO);

            String auth2 = URLEncoder.encode(out123, "UTF-8");

            String z = "userInfo=" + auth2;  // here userinfo is the key of cookie
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);


            cookieManager.setCookie(url, z);
            webViewRoi.setWebChromeClient(new WebChromeClient());
            webViewRoi.loadUrl(url);

Так что если вызнать ключевое имя cookie, тогда вы можете передать свой логин объект через cookie.надеюсь, что это поможет вам.

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