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

未分类 Jireh 40℃ 0评论

最新项目中需要嵌入几个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>

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

转载请注明:Jireh花街向着标杆前进 » 安卓WebView同步Cookie及后续免登陆

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址