您现在的位置是:主页 > news > 平度市城乡建设局网站/杭州网站排名提升
平度市城乡建设局网站/杭州网站排名提升
admin2025/5/16 0:12:03【news】
简介平度市城乡建设局网站,杭州网站排名提升,装饰设计基础知识,网站排名费用现如今,渠道上架应用或游戏,对敏感信息合规检测还是比较严格的,一般都会采用自动化 + 人工检测。 比如上架审核一个无需相机和录音权限的包体,绝大部分会遭到拒审(除非漏检?)&#…
现如今,渠道上架应用或游戏,对敏感信息合规检测还是比较严格的,一般都会采用自动化 + 人工检测。
比如上架审核一个无需相机和录音权限的包体,绝大部分会遭到拒审(除非漏检?)!
本次遇到的就是类似情况,内嵌 H5 的 Unity 游戏,之前是使用原生的 WebView 加载 H5 游戏,
可是实际运行发现加载速度未达到预期效果,调研发现 X5 WebView 据说还可以(有质的提升?)!
腾讯浏览服务 —— 官网
(图:来自官方)
好了!!!
加载速度问题找到了解决方案
原生 WebView 替换为 X5 WebView
具体实施很清晰方便,按照官方文档接入即可。
官方文档指出的是 在线下载内核
完成内核加载等操作,这是使用方式一。
聪明的你们肯定略知还有方式二离线安装内核
。
嗯,总结出来了,x5 内核使用的两种方式:
- 在线安装
- 离线安装
在线安装是大概像这样
HashMap map = new HashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);QbSdk.setDownloadWithoutWifi(true);
QbSdk.initTbsSettings(map);
QbSdk.setTbsListener(new TbsListener());boolean need = TbsDownloader.needDownload(context, false);
QbSdk.initX5Environment(context, mPreInitCallback);
private static QbSdk.PreInitCallback mPreInitCallback = new QbSdk.PreInitCallback() {@Overridepublic void onCoreInitFinished() {Log.d(TAG, "tbs init finished");}@Overridepublic void onViewInitFinished(boolean isSupportX5) {if (isSupportX5) {//已经有可用的内核,无需下载Log.d(TAG, "support x5");} else {Log.d(TAG, "not support x5");//重置并清除缓存等,开始下载线上内核QbSdk.reset(mContext);TbsDownloader.startDownload(mContext);}}};
离线安装大概是这样
离线安装重点就是 installLocalTbsCore
和 本地内核安装包
isInitTbs = QbSdk.canLoadX5(context);
if(!isInitTbs){//拷贝内核文件到自定义外部存储目录 (一个 apk)FileUtils.copyAssets(assetsTbsApkPath,externalPath);
}HashMap<String, Object> map = new HashMap<>(2);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
QbSdk.initTbsSettings(map);//最新版本说 canLoadX5 过时,不过当前没有使用最先版本,有兴趣自行查阅
//当前使用版本是:tbs_sdk_thirdapp_v4.3.0.253_44153.jar
boolean canLoadX5 = QbSdk.canLoadX5(context);
if (canLoadX5) {//已有可用内核,无需安装本地内核,直接初始化preInit(context);return;
}//开始安装本地内核
beginInstallLocalApk(context);
private void beginInstallLocalApk(final Context context) {QbSdk.reset(context);QbSdk.setTbsListener(new TbsListener() {@Overridepublic void onDownloadFinish(int i) {LogUtil.d(TAG, "onDownloadFinish code = " + i);}@Overridepublic void onInstallFinish(int code) {LogUtil.d(TAG, "onInstallFinish code = " + i);int tbsVersion = QbSdk.getTbsVersion(context);//这里是关注重点,本地安装成功之后是需要初始化的,切记preInit(context);}@Overridepublic void onDownloadProgress(int i) {LogUtil.d(TAG, "onDownloadProgress code = " + i);}});//getTBSFileDir: 这个路径是你之前从 assets 拷贝内核到外部存储目录的位置QbSdk.installLocalTbsCore(context, 46007, FileUtils.getTBSFileDir(context).getPath() + File.separator + APK_NAME);//读写权限还是要的String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};boolean hasPermission = PermissionUtils.checkPermissions(context, permissions);if (!hasPermission) {LogUtil.d(TAG, "requestPermissions");Activity activity = CoreManager.getInstance().getActivity();PermissionUtils.requestPermissions(activity, permissions);}}
如何获取内核安装包,可看看某乎文章 呼呼呼呼呼呼呼呼~~
回归标题内容
上述一番操作之后,估计已能成功通过两种方式接入 x5!
兴高采烈,运行 Demo,加载 H5 游戏,一番操作惊呆了 😂
1、弹出权限申请提示
2、点击允许
3、继续弹出权限申请 Toast
4、卡在加载中无法进入游戏
测试: 卡住了,别动,叫人,快(图先欠着)
产品: 什么卡住了,进不去游戏,那还玩个球 😡
测试: 需要相机和录音权限就能进入游戏
产品: 什么,需要允许相机权限(和录音权限),那我还怎么过审 🤬
(堆栈信息是另外一个权限提示 dialog 弹窗)
经测试发现:
使用 045912 x5 内核:没有相机和录音权限申请问题,但是游戏加载提速未达到预期
使用 046007 x5 内核:可以达到预期的加载提速,但是存在权限问题
所以当时有两种问题排查方向是:
- 修改内核 jar java 代码,不进行权限检测(代码修改之后运行初始化一直失败,似乎不可行?)
- 寻找一个介于
045912~046007
的中间满足提速且没有权限问题的版本(有点大海捞针?)
仔细想想,使用 x5 webview 打开一个网页链接是不会弹出权限提示
的,换到加载 h5 游戏就出现了,莫非问题和 h5 项目有强关联🤔
经过一番挣扎 。。。 。。。
我: 我们有没有检查过自己项目是否申请了相关权限?
技术 A: 没有
我: 那有没有使用过工具检测我们的代码,看看是否有权限先关(类似代码静态检测,js 代码我是不太懂的)
技术 B: 忽然间,我记得某某 js 文件存在 camera
先关代码,删除重新打包看看
一切正常了
😂 罪魁祸首竟然是它,注释掉关于 enumerateMediaDeviceList
的调用相关代码一切正常了!!!
function enumerateMediaDeviceList() {}