您现在的位置是:主页 > news > 平度市城乡建设局网站/杭州网站排名提升

平度市城乡建设局网站/杭州网站排名提升

admin2025/5/16 0:12:03news

简介平度市城乡建设局网站,杭州网站排名提升,装饰设计基础知识,网站排名费用现如今,渠道上架应用或游戏,对敏感信息合规检测还是比较严格的,一般都会采用自动化 + 人工检测。 比如上架审核一个无需相机和录音权限的包体,绝大部分会遭到拒审(除非漏检?)&#…

平度市城乡建设局网站,杭州网站排名提升,装饰设计基础知识,网站排名费用现如今,渠道上架应用或游戏,对敏感信息合规检测还是比较严格的,一般都会采用自动化 + 人工检测。 比如上架审核一个无需相机和录音权限的包体,绝大部分会遭到拒审(除非漏检?)&#…

现如今,渠道上架应用或游戏,对敏感信息合规检测还是比较严格的,一般都会采用自动化 + 人工检测。

比如上架审核一个无需相机和录音权限的包体,绝大部分会遭到拒审(除非漏检?)!

本次遇到的就是类似情况,内嵌 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() {}

在这里插入图片描述