在Hybrid作App,須要保存一些數據在本地,通常會使用HTML5的特性localStorage和sessionStorage,具體的介紹請看這裏;本文的重點不在於介紹localStorage,而是經過個人遭遇側重描述爲何HybridApp的數據存儲在localStorage不靠譜...html
我先來描述一下場景,我是負責用HTML5也就是Hybrid作Ios開發的,在9月底,最近發佈了一個新版本後,陸陸續續發現有幾個使用ios用戶告知的一個現象,說每次使用APP都須要從新登陸!用戶的描述是,登陸之後,當天殺掉進程是不會再使用App是不用從新登陸的,可是過幾天之後,再使用App就會要從新登陸;ios
在定位問題的時候,我一般會要按照如下幾個步驟:服務器
1.出現該bug的用戶是大面積的羣體仍是個別幾個:微信
羣體性:很大多是代碼問題,或者服務器問題,由於使用的是同一個app,同一個服務器接口或者同一個服務器的訪問地址;cookie
個別幾個:極可能與用戶的行爲,場景有關,在某些特別的時候,就會觸發app出現某個bug;session
2.出現該bug的用戶是否存在相似類似的地方:若是存在類似的地方,那就模仿用戶的操做,或者模擬用戶的場景,儘可能復現問題;app
3.出現該問題的邏輯:檢查這塊邏輯代碼,是否存在出現問題的可能,調試與模仿用戶的操做;ionic
首先,這個「從新登陸」的問題不是羣發性的由於這幾位用戶分佈在全球,而且這個問題,咱們按照用戶的操做在測試手機上怎麼測試都沒有復現;第二,這個問題出現是個別幾個不同的用戶,都是廣泛的登陸操做,沒有任何移異常的地方;第三,我十分明確我代碼「登陸」這塊邏輯的數據存儲是保存在localStorage上的,在啓動app的時候去檢查localStorage是否存在用戶登陸的數據,若是不存在,則從新登陸,而且在日誌中,我發現不僅僅是登陸數據被清除,是全部存儲在localStorage都沒有了;post
綜上所述,我基本能獲得一個初步結果:在某些特定的狀況下,localStorage被清除了!測試
爲了進一步肯定某些特定的狀況下,我想象過許多可能性
1.因爲app9月底發佈新版本的時候,apple公司剛剛發佈ios10,而且在app日誌中能明顯發現的是,出現該問題的大部分是ios10的用戶!而且在google中也能發現相似的言論!這裏,難道與ios10系統有關?直到我發現一位用戶用的是Ios8,我才完全推翻這個想法;
2.是否是我代碼中,調用了localStorage.clear()方法,強制的清空了全部內存?而後我搜索的全部代碼,並無!
3.是否是手機啓用的app太多,致使系統內存(RAM)不足,而後強制清除了呢?爲了實現這個想法,我在手機中安裝了好幾個大型遊戲,把手機都玩得燙的不要不要的,也沒有出現;
在糾結了半天后,在google獲得了一個重大發現, 這裏;這篇文章中,描述了,在ios8中,當系統空間不足的時候,系統會清除localStorage中的數據!
得知這個消息後,我立刻安排測試的小夥伴去測試,先登陸app,而後多下點應用,把空間使用完;
而後我打電話諮詢了兩位客戶,獲得的消息是,這兩位客戶,手機空間常常不足,最直觀的表現是微信常常提醒要清理空間,他們用的都是16G的Iphone手機!打完電話回到座位,測試的小夥伴興奮的說,復現了復現了,當內存不足的時候,系統那裏會出現個什麼正在清除數據...而後,打開app後,就發現數據被清空了;因此,出現問題的緣由是,當系統存儲空間不足時,會觸發系統級別的清理,而且清除的對象,就有localStorage;
這就是這個奇妙之旅。因此,localStorage存儲數據,在ios中確實不靠譜!在ios系統中這個localStoreage不是一種持久化的數據!雖然這個不是app引起的問題,可是,這個問題仍是得解決!後面若是找到了解決方案,再一篇文章作作記錄唄....
另外,本文僅描述ios,在找資料的同時,也相關的資料說,localStorage在Android一樣不靠譜,可是我沒實測,具體請看 這裏;
資料:
https://forum.ionicframework.com/t/ios-localstorage-persistence/20004/17
http://gonehybrid.com/dont-assume-localstorage-will-always-work-in-your-hybrid-app/
https://forum.ionicframework.com/t/ionic-1-ios-10-local-storage-issue/63519
最新文章地址: https://blog.niezw.com/post/8bf0e032.html