您的位置:首页 > 移动开发

WebView 之 腾讯浏览服务SDK接入

2017-09-14 12:01 666 查看
一、联系方式

1.  官网地址 http://x5.tencent.com 2.  微信公众号:tengxunx5
公众号二维码

论坛:http://bbs.mb.qq.com/forum-110-1.html ( 开发者反馈论坛 )


二、背景知识

1. TBS(腾讯浏览服务)的优势

1)速度快:相比系统WebView的网页加载速度有近30%的提升
2)省流量:云端优化技术使流量节省20%
3)更安全:24小时安全问题解决机制
4)更稳定:经过亿级用户的使用考验,CRASH率0.15%
5)集成强大的视频播放器,支持各种视频格式直接打开
6)适屏排版、字体设置等浏览增强功能的提供
7)Html5更完整支持
8)无系统碎片化问题、更少的兼容性问题


运行环境

1)手机ROM版本高于或等于2.2版本
2)手机RAM大于500M,该RAM值通过手机 /proc/meminfo 文件的MemTotal动态获取
注:如果不满足上述条件,SDK会自动切换到系统WebView,SDK使用者不用关心该切换过程。


SDK尺寸指标

1)SDK提供的JAR包约250K


三、SDK集成步骤

1. 第一步

下载 SDK jar 包放到工程的libs目录下,将源码和XML里的系统包和类替换为SDK里的包和类,具体对应如下:

系统内核SDK内核

android.webkit.ConsoleMessagecom.tencent.smtt.export.external.interfaces.ConsoleMessage
android.webkit.CacheManagercom.tencent.smtt.sdk.CacheManager(deprecated)
android.webkit.CookieManagercom.tencent.smtt.sdk.CookieManager
android.webkit.CookieSyncManagercom.tencent.smtt.sdk.CookieSyncManager
android.webkit.CustomViewCallbackcom.tencent.smtt.export.external.interfaces.IX5WebChromeClient.CustomViewCallback
android.webkit.DownloadListenercom.tencent.smtt.sdk.DownloadListener
android.webkit.GeolocationPermissionscom.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback
android.webkit.HttpAuthHandlercom.tencent.smtt.export.external.interfaces.HttpAuthHandler
android.webkit.JsPromptResultcom.tencent.smtt.export.external.interfaces.JsPromptResult
android.webkit.JsResultcom.tencent.smtt.export.external.interfaces.JsResult
android.webkit.SslErrorHandlercom.tencent.smtt.export.external.interfaces.SslErrorHandler
android.webkit.ValueCallbackcom.tencent.smtt.sdk.ValueCallback
android.webkit.WebBackForwardListcom.tencent.smtt.sdk.WebBackForwardList
android.webkit.WebChromeClientcom.tencent.smtt.sdk.WebChromeClient
android.webkit.WebHistoryItemcom.tencent.smtt.sdk.WebHistoryItem
android.webkit.WebIconDatabasecom.tencent.smtt.sdk.WebIconDatabase
android.webkit.WebResourceResponsecom.tencent.smtt.export.external.interfaces.WebResourceResponse
android.webkit.WebSettingscom.tencent.smtt.sdk.WebSettings
android.webkit.WebSettings.LayoutAlgorithmcom.tencent.smtt.sdk.WebSettings.LayoutAlgorithm

android.webkit.WebStoragecom.tencent.smtt.sdk.WebStorage
android.webkit.WebViewcom.tencent.smtt.sdk.WebView
android.webkit.WebViewClientcom.tencent.smtt.sdk.WebViewClient


需要注意的是:

1)请不要在代码里使用下述写法:

import android.*;

import android.webkit.*;

import android.webkit.WebStorage.*;

import android.net.*;

import android.net.http.*;


2)除了源码里需要把相关的包名和类名进行替换,布局xml里的声明也需要替换,例如:

<com.tencent.smtt.sdk.WebView

android:id="@+id/forum_context"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="5dp"

android:paddingRight="5dp" />


为了确保替换的完整,可以使用脚本checkqbsdk.sh点击下载 进行扫描,windows 上使用TBSSdk接入扫描工具.exe点击下载 进行扫描。脚本放在所有源码的顶级目录下运行即可。后续的版本发布前尽量都运行一遍扫描,以免上次扫描后新提交的代码有未替换的情况发生。替换不完全时,可能发生的问题是关于cookie的身份错误、类转换时的crash等。cookie问题产生的原理是:一段代码把cookie塞给了系统内核,另外一段代码尝试从x5的内核里读取cookie就失败了。类转换的错误产生的原理是:比如xml里指定的是系统的webview,java的代码里把它当作x5的webview使用

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" />


3. 第三步

适配修改:

App 首次就可以加载 x5 内核 App 在启动后(例如在 Application 的 onCreate 中)立刻调用 QbSdk 的预加载接口 initX5Environment ,可参考接入示例,第一个参数传入 context,第二个参数传入 callback,不需要

callback 的可以传入 null,initX5Environment

内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行所以不会阻塞 App 主线程,这个函数内是轻量级执行所以对 App

启动性能没有影响,当 App 后续创建 webview 时就可以首次加载 x5 内核了

目前,由于SDK WebView所提供的WebView类,是对系统WebView的聚合包装,所以: 获取系统内核的WebView或者 x5内核的WebView的宽高

android.webkit.WebView webView = new android.webkit.WebView(this);

int width = webView.getWidth();


需要采用下面的方式进行

com.tencent.smtt.sdk.WebView webView = new com.tencent.smtt.sdk.WebView(this);

int width = webView.getView().getWidth();


4. 第四步

优化异常上报:

对于成熟的产品,都有自己的异常上报机制。当x5内核发生异常时,我们希望拿到x5内核的相关信息,以方便bug定位。请将WebView.getTbsCoreVersion()函数返回的内核版本信息、WebView.getTbsSDKVersion()函数返回的浏览器SDK版本信息、WebView.getCrashExtraMessage()函数返回的crash线索信息携带进异常上报的附加信息里。如果使用的是腾讯的RDM服务,代码添加到getCrashExtraMessage()函数里即可。

5. 第五步

调整cookie的使用:

com.tencent.smtt.sdk.CookieManager和com.tencent.smtt.sdk.CookieSyncManager的相关接口的调用,在接入SDK后,需要放到创建X5的WebView之后(也就是X5内核加载完成)进行;否则,cookie的相关操作只能影响系统内核。

6. 第六步

兼容视频播放:

1)享受页面视频的完整播放体验需要做如下声明:

页面的Activity需要声明

android:configChanges="orientation|screenSize|keyboardHidden"


2)视频为了避免闪屏和透明问题,需要如下设置

a)网页中的视频,上屏幕的时候,可能出现闪烁的情况,需要如下设置:Activity在onCreate时需要设置:

getWindow().setFormat(PixelFormat.TRANSLUCENT);(这个对宿主没什么影响,建议声明)


b)在非硬绘手机和声明需要controller的网页上,视频切换全屏和全屏切换回页面内会出现视频窗口透明问题,需要如下设置

声明当前false为不透明。

特别说明:这个视各app情况所需,不强制需求,如果声明了,对体验更有利

c)以下接口禁止(直接或反射)调用,避免视频画面无法显示:

webview.setLayerType()

webview.setDrawingCacheEnabled(true);


7. 第七步

输入法设置

避免输入法界面弹出后遮挡输入光标的问题

方法一:在AndroidManifest.xml中设置

android:windowSoftInputMode="stateHidden|adjustResize"


方法二:在代码中动态设置:

getWindow().setSoftInputMode(WindowManager.LayoutParams.

SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.

SOFT_INPUT_STATE_HIDDEN);


8. 第八步

app 自定义 UA 的说明

如果 app 需要自定义 UA,建议采取在 SDK 默认UA 后追加 app UA 的方式示例:

webSetting.setUserAgentString(webSetting.getUserAgentString() + APP_NAME_UA);


其中 APP_NAME_UA 是 app 自定义 UA

9. 第九步

app混淆时的处理

由于我们提供的 TBS jar 已经混淆过,所以 App 混淆时可以不再混淆我们的 TBS jar,或者也 可以把我们的混淆策略

proguard点击下载 加入 App 的混淆策略里 注意:如果 App没有按照该规则混淆了 TBS jar,可能导致无法使用 x5内核

9b3a
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sdk webview 腾讯