關(guān)于WebView的同步cookie

先說(shuō)問題:

年會(huì)H5cooki同步失敗璃俗。但是
  • 如果重新下載安裝套利,成功
  • 舊app推励,進(jìn)入app后,不先進(jìn)入年會(huì)H5肉迫,首先進(jìn)入其他H5界面验辞,再回過來(lái)進(jìn)入年會(huì)H5,成功

事情緣由:

2022準(zhǔn)備開年會(huì)了喊衫,行政方面跌造,想通過內(nèi)部OA系統(tǒng),進(jìn)行一輪企業(yè)文化的答題環(huán)節(jié)族购。答題環(huán)節(jié)的內(nèi)容是H5壳贪,App端,只需一個(gè)WebView load就行寝杖。公司的OA违施,歷經(jīng)不下10人的版本迭代、代碼風(fēng)格參差不齊瑟幕,好不容易找到加載的地方---一個(gè)名叫H5ActivityActivity的類磕蒲。

問題分析:

1.本地的Cookie是肯定存在的,問題一定出現(xiàn)在同步cookie進(jìn)webView的地方只盹。

2.如果是如1所說(shuō)辣往,為什么是偶發(fā)性呢?

3.為什么卸載鹿霸、重裝就恢復(fù)了呢排吴?

代碼部分:

        CookieSpUtil.syncCookie(this, "");//同步cookie
        final WebView mWebView = (WebView) findViewById(R.id.mWebView);
        if(TextUtils.isEmpty(webUrl))
            return;
        mWebView.loadUrl(webUrl);
        WebSettings settings = mWebView.getSettings();
        .....

 /**
     *  同步cookie,準(zhǔn)備顯示網(wǎng)頁(yè)
     */
    public static void syncCookie(Context context,String defValue){
        String cookie = CookieSpUtil.getCookieString(context,defValue);
        String[] cookies = cookie.split(";");//這里一定是有值的
        CookieManager cookieManager = CookieManager.getInstance();
        for (int i = 0;i < cookies.length;i++){
            cookieManager.setCookie(Constant.root, cookies[i]);//這里設(shè)置
        }
        CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(context);
        cookieSyncManager.sync();//同步
    }

第一次bug定位:setCookie(如果懦鼠,domain錯(cuò)誤钻哩,那肯定是同步失敗的)

在setCookie時(shí)屹堰,第一個(gè)參數(shù)是傳入的domain,和前端哥們綜合會(huì)診后街氢,發(fā)現(xiàn)歷史代碼中domain是一個(gè)三級(jí)域名扯键,例如:fat1.fat2.fat3,而年會(huì)H5的三級(jí)域名為:h5.fat2.fat3珊肃。因?yàn)橛蛎且患?jí)含二級(jí)荣刑,二級(jí)含三級(jí),所以這里是有問題的伦乔,于是修改domain為二級(jí)域名厉亏。

第二個(gè)疑問?為什么進(jìn)入別的H5界面烈和,再回來(lái)爱只,就好了?按道理招刹,既然domain錯(cuò)誤恬试,那是100%同步失敗的啊

        CookieSpUtil.syncCookie(this, "");//同步cookie
        final WebView mWebView = (WebView) findViewById(R.id.mWebView);
        if(TextUtils.isEmpty(webUrl))
            return;
        mWebView.loadUrl(webUrl);
        WebSettings settings = mWebView.getSettings();
        .....

又和前端哥們、后端哥們綜合會(huì)診疯暑,發(fā)現(xiàn)训柴,因?yàn)槠渌鸋5的domain都是fat1.fat2.fat3,what妇拯?為什么不做成一樣的呢幻馁?

這就沒事了,先進(jìn)入一個(gè)其他H5乖阵,cookie會(huì)同步成功宣赔,再進(jìn)入年會(huì)H5時(shí),同步cookie失敗瞪浸。但是儒将,因?yàn)橹暗腸ookie,所以可以正常進(jìn)入对蒲。

第三個(gè)疑問钩蚊?為什么卸載、重裝后蹈矮,就恢復(fù)了呢砰逻?

經(jīng)排查,發(fā)現(xiàn)泛鸟,卸載蝠咆、重裝后,進(jìn)入app主界面,第一時(shí)間刚操,會(huì)彈出一個(gè)VersionInfo的H5界面闸翅,其原理和第二個(gè)疑問一樣,

這樣菊霜,一切都通了坚冀。

而后,把同步問題鉴逞,還做了些適配

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    cookieManager.flush();
} else {
    CookieSyncManager.getInstance().sync();
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0以上记某,WebView默認(rèn)不允許跨域獲取cookie
    CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true);
}

最后,為了保證年會(huì)能順利的進(jìn)行下去构捡,還做了一個(gè)臨時(shí)的兜底方案液南,把用戶名當(dāng)參數(shù)拼接到url里,這樣叭喜,就萬(wàn)無(wú)一失了贺拣。

至于這個(gè)在線上蓖谢,且經(jīng)歷了數(shù)代的代碼捂蕴,改一處,動(dòng)全身闪幽,

想要重構(gòu)啥辨,可能需要提上公司層面,前后端配合盯腌,才能進(jìn)行了溉知。

暫時(shí),只能從App端腕够,一處一處優(yōu)化级乍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市帚湘,隨后出現(xiàn)的幾起案子玫荣,更是在濱河造成了極大的恐慌,老刑警劉巖大诸,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捅厂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡资柔,警方通過查閱死者的電腦和手機(jī)焙贷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贿堰,“玉大人辙芍,你說(shuō)我怎么就攤上這事「耄” “怎么了故硅?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵外遇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我契吉,道長(zhǎng)跳仿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任捐晶,我火速辦了婚禮菲语,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惑灵。我一直安慰自己山上,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布英支。 她就那樣靜靜地躺著佩憾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪干花。 梳的紋絲不亂的頭發(fā)上妄帘,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音池凄,去河邊找鬼抡驼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肿仑,可吹牛的內(nèi)容都是我干的致盟。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼尤慰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼馏锡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起伟端,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杯道,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荔泳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕉饼,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年玛歌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昧港。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡支子,死狀恐怖创肥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤叹侄,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布巩搏,位于F島的核電站,受9級(jí)特大地震影響趾代,放射性物質(zhì)發(fā)生泄漏贯底。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一撒强、第九天 我趴在偏房一處隱蔽的房頂上張望禽捆。 院中可真熱鬧,春花似錦飘哨、人聲如沸胚想。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浊服。三九已至,卻和暖如春胚吁,著一層夾襖步出監(jiān)牢的瞬間牙躺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工囤采, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留述呐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓蕉毯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親思犁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子代虾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容