移动端项目里常见这样一幕:原生侧头像已经显示出来,点进内嵌的H5页面却又要求登录一遍;或者用户在原生侧点了退出,H5里仍能继续操作。这类问题的根源往往不是某一个bug,而是账号、token与缓存三条同步链路各走各的。
下面按排查方向展开,每条给出判断依据,最后给一个可执行的排查顺序与问题清单。涉及跨端协作的工程细节,可参考软件定制开发与系统集成服务中的交付说明。
现象先分清:是账号不同步、token失效,还是缓存读到旧值
三者表现相似,处理方式完全不同。先用最小成本把现象归类,再动手改代码。
- 账号不同步:原生侧切换了账号,H5仍显示上一个用户的昵称或数据。
- token不同步:request带的是旧token,或H5与原生各自持有一份且刷新时机不同,导致401。
- 缓存不同步:接口已返回新数据,页面仍渲染旧内容,多见于静态资源版本未更新或本地存储未清理。
一个快速判断方法:让原生侧主动发起一次“强制退出并重新登录”,观察H5是否同步跳转。若不跳转,问题在通知机制;若跳转后仍异常,问题在凭证本身。
排查方向一:登录态由谁持有,两端是否只有一个可信源
常见的坏设计是原生和H5各存一份token,各自刷新。两端异步刷新必然造成一个更新、一个过期。
建议明确唯一可信源。常见做法有两种:其一,原生持有token,H5每次需要时通过桥接方法向原生取;其二,H5持有并负责刷新,原生把生命周期事件通知给H5。无论选哪种,另一端只能读、不能自己写。
判断标准很简单:全局搜索token的写入点。如果写入点超过一处,就存在竞态的可能。
排查方向二:桥接通知是否可靠,时机与顺序有没有问题
WebView打开需要时间。原生在页面onLoad之前发起调用,H5的接收函数还没注册,消息就丢了。这是“偶尔不同步”的高频原因。
- 检查原生是否在页面加载完成且H5主动上报Ready之后才下发数据。
- 检查退出登录、账号切换等事件是否做了“H5未就绪时先缓存、就绪后补发”。
- 检查桥接调用的返回值是同步还是异步,H5是否按异步处理。
另外要注意WebView被放入后台后,部分页面会被系统回收,返回时既没重新加载也没收到通知。建议在页面可见性变化时重新拉取一次登录态。
排查方向三:token的存储位置与刷新节奏
token到底存在原生本地存储、cookie还是H5的本地存储里,需要统一。跨域、路径作用域、httpOnly设置不当,都会让某一端读不到。
刷新节奏上,建议做到单一刷新。当多个请求同时返回过期错误时,只让第一个触发刷新,其余等待结果。否则并发刷新会把旧token回写覆盖新token,这类现象在更多技术实现细节里有同类问题的说明。
还要确认刷新失败后的处理:清除本地凭证、通知另一端、跳回登录页,这三步顺序要固定,不能只清一端。
排查方向四:WebView缓存与静态资源版本
如果问题表现为“更新后部分用户看到旧页面”,重点看缓存策略。常见做法是给入口URL加版本参数,或由原生清理WebView缓存。
但清理缓存时要注意,页面内的本地存储里可能存着登录信息,清理后可能出现“掉登录”。建议把凭证与普通业务缓存分开存放,清理时只清业务部分。
排查时可在页面里打印资源版本号和存储的凭证指纹,确认读到的到底是哪一份。
推荐的逐项排查顺序
从成本最低、影响面最广的项开始,避免一上来就改架构。
- 复现并归类现象,确认属于账号、token还是缓存问题。
- 统计token写入点数量,确认唯一可信源。
- 查看原生日志,确认下发时机是否早于H5 Ready。
- 检查并发请求下的刷新是否只有一次。
- 核对本地存储与cookie的作用域、清理时机。
- 比对静态资源版本,排除缓存读到旧页面。
- 最后才考虑调整桥接协议或存储位置。
预防措施:接口约定、联调清单与验收方式
同步问题最好在联调阶段就固化。建议把桥接方法名、参数结构、JSON字段语义写进接口文档,双方按同一份文档实现。
原生与H5各留一套调试日志,记录事件时间、账号标识与凭证指纹,便于对账。上线前做一轮场景验收,至少覆盖冷启动、后台恢复、账号切换、退出登录四种情况。
对于APP定制开发中的离线缓存与数据同步设计,可以结合同类项目案例中类似场景的做法来参考判断标准。
问题清单:可直接照着做
- 全局只有一个token写入点。
- H5上报Ready后,原生才下发用户信息。
- 账号切换与退出登录都有明确事件广播,且覆盖后台恢复场景。
- 并发401只触发一次刷新,等待方拿到同一份新token。
- 清理WebView缓存不清除凭证,或清除后统一下发。
- 入口URL带版本标识,可定位线上页面版本。
- 桥接方法名与参数结构在接口文档中固定,双方对齐。
- 冷启动、后台恢复、切号、退出四类场景纳入验收用例。
按上述顺序检查一遍,通常能定位大部分不同步问题;如果涉及多端账号体系拆分,可参考更多项目案例中的实施方式再定方案。