android - 我们可以在 android WebView 中保存登录数据吗?

标签 android authentication webview

我的网站需要登录才能使用,所以有没有办法为用户保存登录数据,这样他们就不会每次进入WebView时都登录,比如firebase,或者 cookies 等? 如果您需要共享我的代码,请告诉我。

谢谢。

编辑 1:

这是MainActivity.java文件代码:

package com.company.app;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

WebView webView;
SwipeRefreshLayout swipe;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.webView).setVisibility(View.GONE);

    swipe = (SwipeRefreshLayout)findViewById(R.id.swipe);
    swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            WebAction();
        }
    });

    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);

    WebView webview = new WebView(this);
    WebSettings ws = webview.getSettings();
    ws.setSaveFormData(true);
    ws.setSavePassword(true); // Not needed for API level 18 or greater (deprecated)


    WebAction();



}

public void WebAction(){

    webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setAppCacheEnabled(true);

    webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        // chromium, enable hardware acceleration
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    } else {
        // older android version, disable hardware acceleration
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }


    String myURL = "https://www.myURL.com/";

    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);

    WebView webview = new WebView(this);
    WebSettings ws = webview.getSettings();
    ws.setSaveFormData(true);
    ws.setSavePassword(true); // Not needed for API level 18 or greater (deprecated)


    webView.loadUrl(myURL);
    swipe.setRefreshing(true);
    webView.setWebViewClient(new WebViewClient(){

        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

            webView.loadUrl("file:///android_asset/error.html");

        }

        public void onPageFinished(WebView view, String url) {
            // do your stuff here
            swipe.setRefreshing(false);

            findViewById(R.id.webView).setVisibility(View.VISIBLE);


        }

    });

}


@Override
public void onBackPressed(){

    if (webView.canGoBack()){
        webView.goBack();
    }else {
        finish();
    }
}

最佳答案

我找到了答案。

我们只需要添加 this.webView.getSettings().setDomStorageEnabled(true); 以及 this.webView.getSettings().setJavaScriptEnabled(true); .

现在我们可以删除 cookie 代码,并保存数据和登录。

编辑: 如果还不行,尽量不要删除cookies代码。

关于android - 我们可以在 android WebView 中保存登录数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48195419/

相关文章:

android - 我如何启用通过 Webview 下载 PDF

android - Dart中的图像处理

android - 如何在android中创建小部件

android - 由 : java. lang.Exception : No native library is found for os. name=Mac 和 os.arch=aarch64 引起。路径=/org/sqlite/native/Mac/aarch64

java - 自动将变量写入子类

.net - 如何从 ClaimsPrincipal 获取 SecurityToken?

javascript - 将 JavaScript 与 WkWebView 一起使用 - UserMessageHandler 上出现错误

authentication - Cypress 警报(弹出)登录访问 url

python - 无法反序列化解码 JWT python 的关键数据

java - HTML WebView 上使用键盘时如何隐藏 ImageView