[线上][M-pixel] 安卓 webview 内跳不支持 localStorage

2019/08/07

背景

HOJO 口红客户线上数据异常, 1500 左右的 click, 但是网站记录的 content_view 却只有 60-70 个, 经过排查, 发现 Android webview 内部跳转场景无法上报埋点, 而这次投放又只投放了 Android

经过和 SDK 小伙伴的确认, 了解到安卓在初始化内部跳转的 webview 时只开启了 JavaScript 和浏览器缓存, 其他特性都没有开启, 包括用于开启 localStorage 的 setDOMStorageEnabled(true)

兼容外部浏览器和 webview 的数据持久化方案

https://gist.github.com/klovelovely/c635639bda777c8e14dcc6dcc9bd8d22

一个兼容方案, 对不支持 localStorage 的 Android webview 内跳场景使用 cookie 存储, 默认优先使用 localStorage

具体原因:

  1. iOS >= 10 下 Safari 存储 cookie 时, path=/ 无效 (始终会以当前 url 路径存储), 导致不同的父级路径无法读取 cookie
  2. Android webview 默认不支持 localStorage, 需要显式声明: wv.getSettings().setDomStorageEnabled(true);

Android SDK 创建内部跳转的 webview 时的逻辑

Android SDK 创建 RV 和 EC 的 webview 时的逻辑