最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

uniapp本地加载腾讯X5浏览器内核插件

运维笔记admin1浏览0评论

概述

腾讯TBS-X5内核在行业内运营多年,一直有内核加载不稳定的问题,原因主要是成本控制带来的下载带宽流控问题,所以内核下发的操作,最好自己来做。

功能说明

下载SDK插件

功能说明

1.集成x5内核后哪些页面会由x5内核渲染?

(1). 所有plus.webview.create创建的webview

(2). uni-app中所有vue页面

(3). uni-app中的web-view组件

2. uniapp已经提供了x5内核配置,为什么还要自己做加载机制?

因为官方以下加载机制导致的x5浏览器内核加载失败问题:

(1). 周五周六(18:00-21:00)服务器维护不支持下载

(2). 频繁下载x5浏览器内核的IP会被限流下载

(3). 离线打包debug环境下,可会导致下载失败

(4). 腾讯x5内核已经进入商业化运营,不交钱根本无法再免费使用

所以要拥有一套自己稳定100%可成功加载内核的机制,实现可随时随地免费加载。

3.X5内核能解决什么问题?

(1). x5适配了rom的自定义主题字体,与原生字体保持一致。不会出现一个界面部分字体为原生字体、部分字体为webview字体的问题。之前系统webview在部分手机上不能适配rom自定义主题的字体。(注意:部分设备可能需要重新系统或不支持自定义主题字体)

(2). 系统的webview有浏览器兼容问题,低端Android的webview有很多新语法都不支持。使用x5可以拉齐webview内核。对于5+App和wap2app,可以全部拉齐。对于uni-app,由于uni-app自带js引擎,在js和组件层面本身就不存在浏览器兼容问题,只有vue页面的css涉及浏览器兼容问题。如果你想使用比如sticky等新css语法,此时可通过x5拉齐。如果开发者比较注意,不使用太新的语法的话,其实此时x5在这方面没有用处

(3). x5内核自带的video实现强于html的video,支持视频格式更多。(这个只能用于5+app和wap2app的html里的自带video,以及uni-app的web-view组件里的video。uni-app默认的video组件本身就是原生的,和x5无关)

(4). 远程web页面防劫持是x5内核的一大亮点

4.验证是否使用x5以及x5版本号的方法

3.4.14+以上的HBuilderX,使用 uni.getSystemInfo ,看返回的 browserName 和 browserVersion
低版本HBuilderX 使用 plus.navigator.getUserAgent()

x5内核的UserAgent如下:

Mozilla/5.0 (Linux; Android 11; PEXM00 Build/RKQ1.201217.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045738

5.注意事项

(1).从应用市场下载插件导入自己项目后,要先制作自定义插件后,才可以运行使用(示例程序已经打好基座,可以直接运行)

(2).插件需在 Android 5.0-Android13+ 版本可正常使用

(3).腾讯TBS x5内核仅支持Android平台;iOS只能使用自带的WKWebview/UIWebview

(4).尽量使用 HBuilderX 4.0+ 以上的最新版本,以便更好在uni-app和uni-app x中使用uts插件

(5).CPU类型配置不支持“x86”,建议仅配置“armeabi-v7a”和“arm64-v8a”否则可能无法正常使用X5内核

(6).因为项目中已经包含了webview-x5-release.arr依赖,在manifest.json文件中,“App模块配置”不要勾选“Android X5 Webview(腾讯TBS)”:

(7).因为官方强制所有插件上架必须以UTS集成方式发布,如果您是uni小程序sdk集成方式(即以Android工程为主体的自定义打包)的项目,或者是以传统的uni原生插件集成方式集成(即nativeplugins方式)的项目
请通过DCloud IM私信留言,提供nativeplugins集成的支持。

(8).官方云打包100兆以上大小有收费限制,自定义打包请适当注意体积大小,推荐采用网络加载内核方式(即loadUrlX5Core方法加载x5内核),将uni_modules\tbs-x5webview\utssdk\app-android\assets文件夹删掉再进行自定义打包
,如自定义打包、集成、调试遇到任何困难,请及时通过DCloud IM私信留言,提供在线支持。

完整代码示例

<template>
	<view>
		<view style="display: flex;margin:10px;flex-direction: column;">
			<view><text style="font-weight: bold;">浏览器内核:</text>{{userAgent}}</view>
			<view><text style="font-weight: bold;">系统CPU架构:</text>{{supportedAbis}}</view>
			<view><text style="font-weight: bold;">系统版本:</text>{{osName}}</view>
			<view><text style="font-weight: bold;">x5版本号:</text>{{x5Version}}</view>
			<view><text style="font-weight: bold;">x5下载地址:</text>{{x5Url}}</view>
			<view><text style="font-weight: bold;">x5下载进度:</text>{{x5Progress}}</view>
			<scroll-view scroll-x="true">
				<y-json-view :json="json" closed />
			</scroll-view>
			<u-row gutter="10" justify="between">
				<u-col span="3">
					<view style="margin-top: 10px;">
						<button type="default" @click="toWebView()">跳转到WebView页面测试</button>
					</view>
				</u-col>
				<u-col span="3">
					<view style="margin-top: 10px;">
						<button type="default" @click="canLoadX5Core()">验证x5内核是否存在并可用</button>
					</view>
				</u-col>
				<u-col span="3">
					<view style="margin-top: 10px;">
						<button type="default" @click="loadUrlX5Core()" :loading="isLoading" :disabled="isLoading">加载远程X5内核</button>
					</view>
				</u-col>
				<u-col span="3">
					<view style="margin-top: 10px;">
						<button type="default" @click="loadLocalX5Core()">加载本地X5内核</button>
					</view>
				</u-col>
			</u-row>
		</view>
	</view>
</template>
<script>
	import { loadUrl , loadLocal,checkAbiType,canLoadX5 } from "@/uni_modules/tbs-x5webview"
	const modal = uni.requireNativePlugin('modal');
	export default {
		data() {
			return {
				userAgent: '',//浏览器版本
				supportedAbis: '',//手机支持的cpu架构
				abiType: '',//架构类型 1-arm32位 2-arm64位  3-其他
				json: {}, //设备信息
				osName:'',//系统名称和版本
				x5Version: '',//加载的x5版本
				x5Url: '',//加载的x5地址
				x5Progress:0,//网络加载进度
				isLoading:false,//是否正在下载中
			}
		},
		created() {
			this.userAgent = plus.navigator.getUserAgent()
			this.osName = plus.os.name + plus.os.version
			this.json = uni.getSystemInfoSync()
			this.checkSupportedAbis()
		},
		methods:{
			//跳转到webview页面测试
			toWebView() {
				uni.navigateTo({
					url: '/pages/index/toWebView'
				});
			},
			//验证x5内核是否存并可用
			canLoadX5Core(){
				let result = canLoadX5()
				console.log('canLoadX5Core--->', result)
				modal.toast({message: result.msg,duration: 2});
			},
			//查看当前手机支持的CPU架构
			checkSupportedAbis() {
				//1-arm32位 2-arm64位  3-其他 x5内核不支持“x86”和其他CPU类型
				let result =checkAbiType()
				console.log('内核验证结果--->', result)
				this.supportedAbis = result.supportedAbis
				this.abiType = result.code
			},
			//网络加载x5内核  推荐使用
			loadUrlX5Core(){
				let _this = this
				//官网新旧版本说明 https://x5.tencent/docs.html?indator=aboutX5#SDKCompare
				//旧版本免费,最大仅支持Android 5-13版本;
				if(plus.os.version>13||plus.os.version<6){
					modal.toast({message: '腾讯X5内核仅支持Android5-13版本',duration: 2});
					return
				}
				this.isLoading = true
				//1-arm32位 2-arm64位  3-不支持 x5内核不支持“x86”和其他CPU类型
				if (this.abiType === 1) {
					this.x5Version = 46514
					this.x5Url ='https://saas-camp.mvmyun/tbs_core_046514_20230612114949_nolog_fs_obfs_armeabi_release.tbs'
				} else if (this.abiType === 2) {
					this.x5Version = 46515
					this.x5Url ='https://saas-camp.mvmyun/tbs_core_046515_20230612112541_nolog_fs_obfs_arm64-v8a_release.tbs'
				} else {
					modal.toast({message: '没有符合当前手机的可用x5内核使用',duration: 2});
					this.isLoading = false
					return
				}
				
				return new Promise((resolve, reject) => {
					//加载网络内核
					loadUrl(_this.x5Version,_this.x5Url,{
						//加载进度
						onProgressUpdate(progress){
							console.log('内核下载进度--->',progress+'%')
							_this.x5Progress = progress + '%'
						},
						//加载成功
						success(msg){
							console.log('success--->',msg)
							_this.isLoading = false
							modal.toast({message: msg,duration: 2});
						},
						//加载错误
						error(code,msg){
							console.log('error--->',code,msg)
							_this.isLoading = false
							modal.toast({message: msg,duration: 2});
						},
						//是否可以加载X5内核
						isCanLoadX5(isCan){
							console.log('是否可以加载X5内核--->',isCan)
						}
					})
				})
			},
			
			//本地加载x5内核  
			loadLocalX5Core(){
				//官网新旧版本说明 https://x5.tencent/docs.html?indator=aboutX5#SDKCompare
				//旧版本免费,最大仅支持Android 5-13版本
				if(plus.os.version>13||plus.os.version<6){
					modal.toast({message: '腾讯X5内核仅支持Android5-13版本',duration: 4});
					return
				}
				//1-arm32位 2-arm64位  3-不支持 x5内核不支持“x86”和其他CPU类型
				if (this.abiType === 1) {
					this.x5Version = 46514
					this.x5Url ='/tbs/tbs_core_046514_20230612114949_nolog_fs_obfs_armeabi_release.tbs'
				} else if (this.abiType === 2) {
					this.x5Version = 46515
					this.x5Url ='/tbs/tbs_core_046515_20230612112541_nolog_fs_obfs_arm64-v8a_release.tbs'
				} else {
					modal.toast({message: '没有符合当前手机的可用x5内核使用',duration: 4});
					return
				}
				
				//加载本地的内核  将.tsb文件拷贝到 app-android/assets/tbs/目录下,打包自定义基座后,即可实现本地加载,
				//但是打包后apk文件会非常大,而且uniapp云打包会有大小付费限制,建议采用loadUrlX5Core网络加载
				//如果不采用本地加载x5内核,一定要把assets目录整个删除,否则无法自定义打包基座,会遇到大小限制问题
				loadLocal(this.x5Version,this.x5Url,{
						onProgressUpdate(progress){
							console.log('onProgressUpdate--->',progress)
						},
						success(msg){
							console.log('success--->',msg)
							modal.toast({message: msg,duration: 2});
						},
						error(code,msg){
							console.log('error--->',code,msg)
							modal.toast({message: msg,duration: 2});
						},
						isCanLoadX5(isCan){
							console.log('isCanLoadX5--->',isCan)
						}
					}
				)
			}
		}
	}
</script>

腾讯X5内核官网地址

长期维护,持续更新,提供终身免费技术支持

本插件已稳定运行3年,累计为20万多商户及个人提供服务,请您放心使用

发布评论

评论列表(0)

  1. 暂无评论