Jireh程序猿的那些事 Jireh程序猿的那些事

记录分享生活、程序、信息的精彩人生

目录
安卓WebView同步Cookie及后续免登陆
/    

安卓WebView同步Cookie及后续免登陆

最新项目中需要嵌入几个 H5 的界面,APP 的登入功能也放在 H5 端,第一次登入后,后续可以免登陆。使用 WebView 实现以上简单功能当中出现的问题和解决方法。

首先声明一个 WebView

private WebView mWebView;

在定义两个 Url 变量,一个是登陆的 一个是登陆之后的

public static final String ENTRANCE_URL_LOGIN = "http://xxx.xxx.xxx.xxx/trouble/admin_login.aspx"; //登陆url

public static final String ENTRANCE_URL_HOME = "http://xxx.xxx.xxx.xxx/trouble/manager/index.aspx"; //登陆后调整的url

在 onCreate 中创建

@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_web_view);
    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    String CookieStr = cookieManager.getCookie(ENTRANCE_URL_HOME); //获取cookie
    mWebView = (WebView) findViewById(R.id.webview);
    WebSettings webSettings = mWebView.getSettings();
    SharedPreferences cookid = getSharedPreferences("UserConfiguration",MODE_PRIVATE);//存储Cookie信息

    webSettings.setJavaScriptEnabled(true);//打开js支持
    /**
     * 打开js接口給H5调用,参数1为本地类名,参数2为别名;h5用window.别名.类名里的方法名才能调用方法里面的内容,例如:window.android.back();
     * */
    mWebView.addJavascriptInterface(new JsInteration(), "JSInterface");
    mWebView.setWebViewClient(new WebViewClient());
    mWebView.setWebChromeClient(new WebChromeClient());

    // 开启Javascript脚本
    webSettings.setJavaScriptEnabled(true);
    // 判断Cookie是否存在
    if(TextUtils.isEmpty(CookieStr)) {
        mWebView.loadUrl(ENTRANCE_URL_LOGIN);
    } else{
        //同步Cookie给WebView
        syncCookie(ENTRANCE_URL_HOME,CookieStr);
        mWebView.loadUrl(ENTRANCE_URL_HOME);
    }
    //使用SharedPreferences存储
    SharedPreferences.Editor editor =cookid.edit();
    editor.putString("cookid",cookieManager.getCookie(ENTRANCE_URL_HOME));
    editor.commit();
    Log.d(TAG, "onCreate cookie:" + CookieStr);
}

以上有加 JS 支持,要是没用可以删掉。

syncCookie 同步 Cookie 方法

/**
    * 将cookie同步到WebView
    * @param url WebView要加载的url
    * @param cookie 要同步的cookie
    * @return true 同步cookie成功,false同步cookie失败
    * @Author JPH
    */
   public static boolean syncCookie(String url,String cookie) {
           if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
               CookieSyncManager.createInstance(context);
           }
       CookieManager cookieManager = CookieManager.getInstance();
       cookieManager.setCookie(url, cookie);//如果没有特殊需求,这里只需要将session id以"key=value"形式作为cookie即可
       String newCookie = cookieManager.getCookie(url);
       return TextUtils.isEmpty(newCookie)?false:true;
   }

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical" >

    <WebView
            android:id="@+id/webview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="9"
            />

</LinearLayout>

到这里就可以实现基本的功能


如果觉得这篇文章不错的话,请我喝一杯 咖啡☕吧
标题:安卓WebView同步Cookie及后续免登陆
作者:Jireh
地址:https://www.lyile.cn/articles/2020/03/10/1583805678233.html
本作品由 Jireh 采用 署名 – 非商业性使用 – 禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。