Android WebView Cookie获取和设置,原生和H

2022-04-20  本文已影响0人  卖臭豆腐的王致和

ps:
当我们实现原生app使用webView打开网页时候,然后h5网页有登录逻辑,会自动跳转到H5页面的登录页,但当用户已经在我们app登录过,这时候再让用户进行一次登录操作,是非常不友好的用户体验。

例如一个非常实现的业务,用户在打开app后会有一个活动弹窗,点击弹窗进入H5的活动落地页,但是活动这种业务需求,生命周期是非常短的,运营同学可能几天就换一种运营方式,抽奖、送优惠券、积分兑换等,实现逻辑不同,页面风格也不同,这种时候,如果我们的app一直频繁的发版,升级app版本是非常不友好的用户体验。而这种活动落地页面,始终伴随着用户信息,需要用户登录状态才可以正常参与。

这时候记录用户登录信息,下次打开H5页面,不需要重复登录这个需求,就十分重要了!!!

通常H5网页会从Cookie获取token,然后通过token来判断用户是否登录,所以如果我们可以将app的token传给H5,那就完美解决了问题。

实现方法有很多种,例如通过JS交互就可以,但是对于前端同学来说,这个改动的工程量非常大。所以这里我是推荐使用通过设置Cookie的方式实现,理论上前端同学是几乎不许要动任何代码的。

下面是给网页设置一个aaa=123456的cookie的例子

        // 保留cookies,而不是在随后的重新启动后清除
        CookieManager cookieManager = CookieManager.getInstance();
        // 允许接受 Cookie
        cookieManager.setAcceptCookie(true);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            // 跨域cookie读取
            cookieManager.setAcceptThirdPartyCookies(wv, true);
        }
        // 一定要给主域设置cookie,给子级地址设置,父级会无法获取到cookie值
        Log.i(TAG, "afterLoadLayout1: "+CookieManager.getInstance().getCookie("http://192.168.7.104:8080/"));
        Log.i(TAG, "afterLoadLayout2: "+CookieManager.getInstance().getCookie("http://192.168.7.104:8080/abc"));
        Log.i(TAG, "afterLoadLayout2: "+CookieManager.getInstance().getCookie("http://192.168.7.104:8080/abc/abc"));
        cookieManager.setCookie("http://192.168.7.104:8080/", "aaa=123456");
        // cookieManager.setCookie("http://192.168.7.104:8080/abc/abc", "aaa=123456");
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            CookieSyncManager.getInstance().sync();
        } else {
            cookieManager.flush();
        }
        Log.i(TAG, "afterLoadLayoutA: "+CookieManager.getInstance().getCookie("http://192.168.7.104:8080/"));
        Log.i(TAG, "afterLoadLayoutB: "+CookieManager.getInstance().getCookie("http://192.168.7.104:8080/abc"));
        Log.i(TAG, "afterLoadLayoutB: "+CookieManager.getInstance().getCookie("http://192.168.7.104:8080/abc/abc"));
        // 配置 WebView
        WebSettings webSettings = wv.getSettings();
        // 开启DOM storage API 功能
        webSettings.setDomStorageEnabled(true);
        // 开启database storage API功能
        webSettings.setDatabaseEnabled(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setBlockNetworkImage(false);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

注意

使用Navicat打开Cookies表.png
上一篇下一篇

猜你喜欢

热点阅读