12/12/2024 11:37:55
问题描述
Webview JS 常见问题及排查流程
问题原因
咨询类
解决方案
一、发生问题的系统版本及内核版本
JS 功能依赖于客户端 web 内核,出现问题了要第一时间明确发生问题的设备的系统版本(iOS)和内核版本(Android),其中 iOS 依赖于系统的 Webkit 内核,使用苹果原生的 WKWebview (MSDK 3.3.9i/MSDK 5.7.001 之前可能有使用 UIWebview),Android 依赖于 TBS 内核。
查看 TBS 浏览器版本及内核种类和版本号方法(该方法由 TBS 同学提供,未来可能会有变动):通过内置浏览器打开链接 debugtbs.qq.com 查看,当内核版本信息显示“0”时,则说明是系统内核。
二、明确问题种类
JS 问题一般分为两种,UI 问题及功能性问题。
1、UI 问题(相对较少,一般需要联系 MSDK助手 定位)
Webview 界面显示异常,比如 MSDK 的 Webview 上状态栏或下工具栏显示异常、旋转屏幕后 Webview 工具栏或状态栏位置异常等,但是需要注意的是活动页面内部的 UI 显示异常并不在 MSDK 处理范围内,需要活动页面开发同学自行适配。
2、功能性问题(相对较多,一般可以由页面同学自行适配解决)
一般功能性问题表现在 JS 调用分享异常、JS 调用登录异常(这个并非 MSDK 能力)、伪链接拉不起 APP 等问题。
三、JS 功能常见问题
1、JS 某些按钮点击无反应(调用系统接口或者加载某些特定标签)
需要确认下对应版本的内核是否支持这些 API,一般使用 Andorid TBS 内核的话可以联系 X5Helper 协助定位,iOS WebKit 内核和 Android 系统内核可以自行 Google 寻找其对该 JS API 的支持情况。
2、JS 某些按钮点击无反应(调用 MSDK 提供的 JS api)
判断功能是否正常的验证方式:可以将下方的 MSDK JS Demo 链接放置到游戏的内置浏览器中实际测试相关功能是否正常,若 JS Demo 运作正常则需要页面侧自己排查原因,MSDK 功能是正常的。
V5 JS Demo 链接:https://img.ssl.msdk.qq.com/msdk_client_test/MSDKWebViewDemo.html
V3 JS Demo 链接:https://img.msdk.qq.com/wiki/msdkjs.html
若 JS Demo 也不好用,可以参考下表中的处理方式:
MSDK 版本 | 操作平台 | 解决方案 |
V5 | Android | 参照 获取 MSDK 日志 的方式拿到复现时候的 MSDK 日志,通过错误信息具体问题具体分析。 |
V5 | iOS | 可以通过延迟 1s 左右调用相关 API 再测试看下结果,iOS 的 JS 功能依赖页面与客户端之间建立起 JSBridge 桥接,如果过快调用可能桥接还没建立好。 |
V3 | 双端 | 1.可以尝试删除 MSDK JS 依赖之外的所有 JS 依赖再测试下相关功能。 2.获取下 Debug 环境下的 MSDK 日志具体问题具体分析。 |
3、页面滑动卡顿或者其他页面内 UI 显示问题
需页面侧自行适配或者联系 Webview 内核侧寻求帮助,MSDKWebview 并不控制页面内实际显示内容。
4、页面内弹出预料之外的弹窗等
MSDKWebview 并不包含各式弹窗 UI,页面侧需自行排查弹窗来源。
5、iOS 端页面某条请求无返回请求结果,日志中有错误信息:Error Domain=NSURLErrorDomain Code=-999
问题原因:-999 对应的系统错误描述是 Cancelled,原因是业务前一次异步请求没加载完就发起了第二次请求,Webkit 判断前次请求取消然后直接返回给了 MSDK,导致后续的请求也被终止。
解决方案:该问题只会在 MSDK V3 旧版本出现,MSDK 3.3.23i 版本开始对这里做了保护。
6、伪链接无法拉起其他 APP
(1)需要先在系统浏览器或者 QQ 浏览器中通过相同的复现路径打开同样的伪链接,若其他浏览器也无法拉起,需要找伪链接提供方确认伪链接的有效性;
(2)仅 iOS 端的问题可以看下游戏 XCode 工程的 info.plist 文件中,LSApplicationQueriesSchemes 字段有没有配置目标 APP 的白名单,iOS 系统限制没有配置白名单就无法拉起对应的 APP;
(3)需要跟目标 APP 确认是否通过技术手段防止被唤起,以防止该能力被恶意利用。
7、页面获取不到游戏内的登录态
MSDK 通过在游戏客户端打开的活动页面 URL 后增加加密登录态参数的方式,给活动页面传递登录态信息。V5 版本追加的参数名为: itopencodeparam,V3 版本: msdkEncodeParam,页面侧可以自行获取加密登录态,并通过 MSDK 提供的 V5版本解密接口 或 V3版本解密接口 进行登录态解密。
该能力为 MSDK 的 OpenUrl 接口默认的能力,但是 MSDK V5 版本提供客户端配置可以不追加加密登录态,活动页面开发同学请务必与游戏客户端开发同学确认好是否有相关配置。
详见: V5 WebView
8、页面侧如何判断游戏客户端接入的是 MSDK V3 还是 V5版本
MSDK 侧未提供相关接口判断,也不建议业务通过 User-Agent 等方式作为判断依据,需要活动页面开发同学自行判断。
All rights reserved.