【Android -- 开源库】腾讯 TBS 浏览器 SDK 接入

这篇具有很好参考价值的文章主要介绍了【Android -- 开源库】腾讯 TBS 浏览器 SDK 接入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

在 Android 开发项目中,经常会用到 Webview 。而 WebView 是出了名的坑,各种 Bug。腾讯 TBS 浏览服务面向应用开发商和广大开发者,提供浏览增强,内容框架,广告体系,H5游戏分发,大数据等服务,能够帮助应用开发商大幅改善应用体验,有效提升开发,运营,商业化的效率。

官网地址: https://x5.tencent.com

1. 优势

  • 速度快:相比系统webview的网页打开速度有30+%的提升;
  • 省流量:使用云端优化技术使流量节省20+%;
  • 更安全:安全问题可以在24小时内修复;
  • 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
  • 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
  • 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
  • 功能全:在Html5、ES6上有更完整支持;
  • 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
  • 视频和文件格式的支持x5内核多于系统内核
  • 防劫持是x5内核的一大亮点

其中,X5云端服务包括云加速、云安全、云转换三大功能。云加速是通过首屏加速、智能路由、图片压缩等技术保障网页浏览的快、省、悦;云安全是通过代理加密、URL安全检测、JS黑名单管理、负载监控等防范网页被劫持插入广告、保障网页浏览的安全稳定;云转换是使用URL聚合+XPATH的解决方案,解决移动阅读难题。

2. 运行环境

  • Android 版本: Android 4.0 ~ Android 12.0
  • CPU 架构:armeabi、armeabi-v7a、arm64-v8a

使用

1. 基础配置

1.1 SDK 接入

方式一:jar包方式集成(推荐)

您可将官网下载的jar包复制到您的App的libs目录,并且通过Add As Library的方式集成TBS SDK。

前往官网下载SDK

方式二:自动集成
使用 mavenCentral 仓库

在项目级别(通常是根目录下)的 build.gradle 中添加:

repositories {
    google()
    // 增加这行
    mavenCentral()
}

在应用级别(通常是 app 模块下)的 build.gradle 中添加依赖:

dependencies {
    ...
    // 增加这行
    implementation 'com.tencent.tbs:tbssdk:44286'
}
1.2 权限配置

AndroidManifest.xml 里权限声明

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!-- 硬件加速对X5视频播放非常重要,建议开启 -->
<uses-permission android:name="android.permission.GET_TASKS"/>

2. 代码

2.1 在 Application 初始化 x5 内核接口
		/**
         * 搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
         */
        QbSdk.PreInitCallback callback = new QbSdk.PreInitCallback() {
            @Override
            public void onViewInitFinished(boolean arg) {
                //x5內核初始化完成的回调,
                // true表示x5内核加载成功,
                // false表示x5内核加载失败,会自动切换到系统内核。
                Log.i("kevin", "X5内核是否成功加载= " + arg);
            }

            @Override
            public void onCoreInitFinished() {
            }
        };
        QbSdk.setTbsListener(new TbsListener() {
            @Override
            public void onDownloadFinish(int i) {
                Log.i("kevin", "onDownloadFinish: " + i);
            }

            @Override
            public void onInstallFinish(int i) {
                Log.i("kevin", "onInstallFinish: " + i);
            }

            @Override
            public void onDownloadProgress(int i) {
                Log.i("kevin", "onInstallFinish: " + i);
            }
        });

        QbSdk.initX5Environment(getApplicationContext(), callback);

2.2 初始化 WebSettings

private void initWebSettings() {
    WebSettings webSetting = this.getSettings();
    webSetting.setJavaScriptEnabled(true);
    webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
    webSetting.setAllowFileAccess(true);
    webSetting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
    webSetting.setSupportZoom(true);
    webSetting.setBuiltInZoomControls(true);
    webSetting.setUseWideViewPort(true);
    webSetting.setSupportMultipleWindows(true);
    webSetting.setAppCacheEnabled(true);
    webSetting.setDomStorageEnabled(true);
    webSetting.setGeolocationEnabled(true);
    webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
    webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
    webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
}

2.3 简单封装

如果在项目中使用,一般来说最好是封装多一层。文章来源地址https://www.toymoban.com/news/detail-681335.html

  • 防止和原生的WebView搞混
  • 有什么问题,一改全改。
  • 可以添加一些功能,例如进度条等。
/**
 * author: Kevin_Gong
 * date: 2023/6/1
 * desc: 封装一个带进图条的 WebView
 */
public class ProgressWebView extends WebView {
    //进度条
    private ProgressBar progressbar;

    //进度条的高度,默认10px
    private int progressHeight = 10;

    public ProgressWebView(Context context) {
        this(context,null);
    }

    public ProgressWebView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        initView(context);
    }

    private void initView(Context context) {
        //创建进度条
        progressbar = new ProgressBar(context, null,
                android.R.attr.progressBarStyleHorizontal);
        //设置加载进度条的高度
        progressbar.setLayoutParams(new AbsoluteLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, progressHeight, 0, 0));

        Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_states);
        progressbar.setProgressDrawable(drawable);

        //添加进度到WebView
        addView(progressbar);

        //初始化 WebSettings
        initWebSettings();


        setWebChromeClient(new WVChromeClient());
        setWebViewClient(new WVClient());
    }

    private void initWebSettings() {
        WebSettings webSetting = this.getSettings();
        webSetting.setJavaScriptEnabled(true);
        webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
        webSetting.setAllowFileAccess(true);
        webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSetting.setSupportZoom(true);
        webSetting.setBuiltInZoomControls(true);
        webSetting.setUseWideViewPort(true);
        webSetting.setSupportMultipleWindows(true);
        webSetting.setAppCacheEnabled(true);
        webSetting.setDomStorageEnabled(true);
        webSetting.setGeolocationEnabled(true);
        webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
        webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
        webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
    }



    //进度显示
    private class WVChromeClient extends WebChromeClient {


        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            if (newProgress == 100) {
                progressbar.setVisibility(GONE);
            } else {
                if (progressbar.getVisibility() == GONE) {
                    progressbar.setVisibility(VISIBLE);
                }
                progressbar.setProgress(newProgress);
            }

            if (mListener != null) {
                mListener.onProgressChange(view, newProgress);
            }

            super.onProgressChanged(view, newProgress);
        }

    }

    private class WVClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            //在当前Activity打开
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            //https忽略证书问题
            handler.proceed();
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            progressbar.setVisibility(GONE);
            if (mListener != null) {
                mListener.onPageFinish(view);
            }

            super.onPageFinished(view, url);

        }

    }

    private onWebViewListener mListener;

    public void setOnWebViewListener(onWebViewListener listener) {
        this.mListener = listener;
    }

    //进度回调接口
    public interface onWebViewListener {
        void onProgressChange(WebView view, int newProgress);

        void onPageFinish(WebView view);
    }
}

到了这里,关于【Android -- 开源库】腾讯 TBS 浏览器 SDK 接入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【开源项目】STF,从浏览器远程调试和控制安卓设备

    STF是一个非常有用的工具,可以帮助开发者和测试者在不同的设备上进行应用程序的调试和测试。它也可以用于教育和娱乐的目的,比如远程控制别人的手机或者玩游戏。 它的主要功能有:   查看和控制设备的屏幕、键盘、鼠标、触摸、音量等;   安装和卸载应用程序;

    2024年02月01日
    浏览(59)
  • Android问题笔记 - 关于腾讯文档TBS离线的研究

    专栏分享 点击跳转=Unity3D特效百例 点击跳转=案例项目实战源码 点击跳转=游戏脚本-辅助自动化 点击跳转=Android控件全解手册 点击跳转=Scratch编程案例 点击跳转=软考全系列 众所周知,人生是一个漫长的流程,不断 克服困难 ,不断反思前进的过程。在这个过程中会产生很多对

    2024年02月08日
    浏览(63)
  • Docker本地部署开源浏览器Firefox并远程访问进行测试

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏览器垄断地位的浏览器之一。 在Docker中打开Firefox意味着我

    2024年02月04日
    浏览(55)
  • Android升级WebView浏览器内核版本

    使用 AOSP 项目编译的 Android 系统,会发现在部分 APP 使用系统自带的浏览器内核来加载网页时会出现报错,加载不出网页的情况,其实这是由于 WebView 自带的 浏览器内核版本太旧 所导致的,只要更新成比较新的浏览器内核版本就行了。 一、环境准备 (1) Android系统源码编译

    2024年02月04日
    浏览(95)
  • Android集成腾讯TBS_X5内核的一些解决方法

    关于我开发中遇到的问题,主要还是不够细心导致的,官方文档写的也没很清楚,但是还是分享出来一下,让新手可以少走弯路,也防止自己忘记了。主要有下面几个问题: 1).我测试环境集成了,但是打包正式的时候居然没有集成成功,还是启用系统内核。      解决方案

    2024年02月02日
    浏览(29)
  • JS一些常用判断(包括判断是否是苹果(ios)/安卓(Android)、是否是Safari浏览器、检测浏览器语言等等)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 参考链接 JS判断客户端是否是iOS或者Android:http://caibaojian.com/browser-ios-or-android.html

    2024年02月04日
    浏览(86)
  • Cypress.io:快速简单可靠的浏览器测试工具 | 开源日报 No.142

    Stars: 45.5k License: MIT Cypress.io 是一个快速、简单和可靠的浏览器测试工具,可以用于任何在浏览器中运行的内容。它支持 Mac、Linux 和 Windows 系统,并提供了安装指南。 Stars: 4.1k License: GPL-3.0 DeskHop 是一个快速切换桌面的设备,它允许用户通过键盘快捷键或鼠标指针在不同操作系

    2024年01月25日
    浏览(52)
  • 前端:推荐一款开源免费的浏览器端Markdown编辑器Vditor

    目前程序员的世界到处都是Markdown ,比如CSDN、简书、GitCha、 GitHub、掘金社区等等都支持Markdown文档,另外近几年许多官方技术文档都是使用Markdown来写的。 使用Markdown不仅可以非常方便的写博客、写技术文档,而且可以直接导出对应的网站内容,导出可打印的文档 ,另外Ma

    2024年02月08日
    浏览(54)
  • 是的,Android版Edge浏览器支持Extension(插件/扩展)了

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。 有些小伙伴的消息渠道实在过于灵通,所以这件事我也不用藏着掖着了。 (此处插件指的就是Extension,虽然Extension最标准的翻译应该是扩展) 其实Extension这

    2024年04月09日
    浏览(48)
  • 开源语言模型的历史和重要性;Edge浏览器将推出Bing AI重写文本功能

    🦉 AI新闻 🚀 微软即将推出桌面版Microsoft Edge浏览器的Bing AI重写文本功能 摘要 :微软最近在桌面版Microsoft Edge浏览器中引入了一个新功能,允许用户使用Bing AI重写文本。用户可以选择不同的语气、格式和长度,然后通过重写按钮来生成Bing AI的回应。目前该功能正在向部分内

    2024年02月14日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包