当前位置 : 主页 > 手机开发 > 其它 >

Hybrid使用localStorage储存数据不靠谱!

来源:互联网 收集:自由互联 发布时间:2021-06-12
在Hybrid做App,需要保存一些数据在本地,一般会使用HTML5的特性localStorage和sessionStorage,具体的介绍请看这里;本文的重点不在于介绍localStorage,而是通过我的遭遇侧重描述为什么HybridA

    在Hybrid做App,需要保存一些数据在本地,一般会使用HTML5的特性localStorage和sessionStorage,具体的介绍请看这里;本文的重点不在于介绍localStorage,而是通过我的遭遇侧重描述为什么HybridApp的数据存储在localStorage不靠谱...

    我先来描述一下场景,我是负责用HTML5也就是Hybrid做Ios开发的,在9月底,最近发布了一个新版本后,陆陆续续发现有几个使用ios用户告知的一个现象,说每次使用APP都需要重新登录!用户的描述是,登录以后,当天杀掉进程是不会再使用App是不用重新登录的,但是过几天以后,再使用App就会要重新登录;

    在定位问题的时候,我通常会要按照以下几个步骤:

        1.出现该bug的用户是大面积的群体还是个别几个:

                群体性:很大可能是代码问题,或者服务器问题,因为使用的是同一个app,同一个服务器接口或者同一个服务器的访问地址;

                个别几个:很可能与用户的行为,场景有关,在某些特别的时候,就会触发app出现某个bug;

        2.出现该bug的用户是否存在类似相似的地方:如果存在相似的地方,那就模仿用户的操作,或者模拟用户的场景,尽量复现问题;

        3.出现该问题的逻辑:检查这块逻辑代码,是否存在出现问题的可能,调试与模仿用户的操作;

    首先,这个“重新登录”的问题不是群发性的因为这几位用户分布在全球,并且这个问题,我们按照用户的操作在测试手机上怎么测试都没有复现;第二,这个问题出现是个别几个不一样的用户,都是普遍的登录操作,没有任何移异常的地方;第三,我十分明确我代码“登录”这块逻辑的数据存储是保存在localStorage上的,在启动app的时候去检查localStorage是否存在用户登录的数据,如果不存在,则重新登录,并且在日志中,我发现不单单是登录数据被清除,是所有存储在localStorage都没有了;

    综上所述,我基本能得到一个初步结果:在某些特定的情况下,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

网友评论