<application ..>一、使用说明
1、快速打开网页
此操作会打开一个全屏的自定义标签页,并支持自定义UI
2、预热:
- 定义:使用自定义标签服务,提升网页打开速度
- 技术实现:通过
prepare
加快浏览器启动速度以及预提取网页 - 效率提升:在打开链接时,浏览器进程的预热时间最长可节省40%
二、开发流程

三、开发步骤
添加 App Id 和构建版本 Debug 标识
- App Id
com.xiaomi.xms.APP_ID
当开通服务时,会生成 App Id 唯一标识,用于鉴权
必须配置 App Id,调用服务时会通过 App Id 进行鉴权
- 构建版本 Debug 标识
com.xiaomi.xms.BUILD_TYPE_DEBUG
当前 APK 是否为 Debug 构建版本。若不配置,默认为 false
备注:鉴权时会验证应用 apk 签名。开发调试阶段,一般不会运行 Release 签名的 apk,通常都是运行 Debug 签名 apk,为了保证在开发阶段仍然可以鉴权成功,开发者可以在平台同时添加正式证书指纹(Release 签名)和测试证书指纹(Debug 签名),用于不同场景下鉴权。
- 在应用的 AndroidManifest.xml 中添加
meta-data
配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<meta-data
android:name="com.xiaomi.xms.APP_ID"
android:value="your app id here" />
<meta-data
android:name="com.xiaomi.xms.BUILD_TYPE_DEBUG"
android:value="true or false" />
</application>
</manifest>
1、混淆配置
如果您需要使用proguard混淆代码,需确保不要混淆SDK的代码。
在proguard-rules.pro文件下添加
#MiCT
-keep class com.android.browser.customtabs.** implements java.io.Serializable { *; }
2、小米开放平台申请权限,并在项目AndroidManifest.xml进行配置
<application ..>
<meta-data
android:name="com.xiaomi.xms.APP_ID"
android:value="11111111" />
<meta-data
android:name="com.xiaomi.xms.BUILD_TYPE_DEBUG"
android:value="true" />
..
</application>
3、AndroidManifest.xml配置查询权限,检查是否支持MiCT秒开能力
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<intent>
<action android:name="com.android.browser.customtabs.action.CustomTabsService" />
</intent>
</queries>
</manifest>
4、初始化MiCT,判断鉴权是否通过
CustomTabsHelper.getInstance().auth(this, callback)
5、设置MiCT服务相关能力回调监听
CustomTabsHelper.getInstance().setCustomTabsCallback(object : CustomTabsCallback() {
override fun extraCallback(callbackName: String, args: Bundle?) {
super.extraCallback(callbackName, args)
when (callbackName) {
"firstContentRendered" -> {
// 页面加载完成回调,获取页面加载成功失败状态
val success = args?.getBoolean("success", true) ?: false
val data = args?.getBundle(CustomTabsIntent.EXTRA_TRANSMISSION_DATA)
}
}
}
override fun onWarmupCompleted(extras: Bundle) {
// 预热完成
Log.d(TAG, "onWarmupCompleted")
}
})
6、预热网页
CustomTabsHelper.getInstance().prepare(this, "https://mi.com/")
7、打开MiCT网页
CustomTabsHelper.getInstance()
.openCustomTab(this@MainActivity, Uri.parse(url)) { activity, uri ->
// 添加打开失败处理
startActivity(
Intent(activity, WebViewActivity::class.java).setData(uri)
)
}
8、自定义界面
CustomTabsHelper.getInstance().openCustomTab(this, uri, CustomTabsIntent.Builder().apply{
setDefaultColorSchemeParams(CustomTabColorSchemeParams.Builder().apply {
// 设置标题栏颜色
setToolbarColor(Color.parseColor("#0D84FF"))
}.build())
// 可选,设置标题栏深色模式颜色,未设置默认适配黑色
setColorSchemeParams(
CustomTabsIntent.COLOR_SCHEME_DARK,
CustomTabColorSchemeParams.Builder().apply {
setToolbarColor(Color.parseColor("#51211E"))
}.build()
setShowTitle(true) // 设置标题显示状态
setShowDomain(false) // 设置地址域名显示状态
setBackIconStyle(true) // 是否显示返回按钮,默认显示 X 按钮
setShowMenu(true) // 是否显示右上角菜单选项
)
}.build())
9、使用JavascriptInterface接口能力
9.1、通知浏览器MiCT准备JS接口类
CustomTabsHelper.getInstance().preloadJavascriptInterface(TestJs.class)
例: TestJs.java
class TestJs {@
JavascriptInterface
public String getPackageName() {
return "com.demo"
}
}
9.2、打开页面,并调用addJavascriptInterface注入对应JS接口实例
CustomTabsHelper.getInstance().openCustomTab(this, Uri.parse(URL),
CustomTabsIntent.Builder().apply {
addJavascriptInterface(TestJs(this@CustomJSActivity), "test")
}.build()
)
9.3、网页即可调用对应Native方法
举例:window.test.getPackageName()
四、 接口说明/API参考文档/调用方式说明
1、API接口文档
1.1 接口概述
SDK能力统一调用类 CustomTabsHelper
、打开失败回调CustomTabFallback
、服务连接状态监听ConnectionCallback
、服务能力回调CustomTabsCallback
、鉴权状态回调 AuthCallback
(1)CustomTabsHelper 能力统一管理类,采用单例模式,通过getInstance()获取该对象
API接口 | 功能 |
init(Context context) | 初始化调用,建议在Application中调用 |
auth(Context context, CustomTabsAuth.AuthCallback authCallback) | 初始化MiCT服务,获取平台鉴权状态 |
supportMiCustomTabs(Context context) | 是否支持浏览器MiCT能力 |
prepare(Context context, String url) | 预热网页 |
setConnectionCallback(ConnectionCallback callback) | 监听服务连接状态 |
setCustomTabsCallback(CustomTabsCallback callback) | 监听网页预热、加载成功状态 |
bindService(Context context) | 绑定服务,建议在ConnectionCallback连接断开时调用 |
openCustomTab(Activity activity, Uri uri, CustomTabFallback callback) | 使用小米浏览器MiCT页面打开链接 |
openCustomTab(Context context, Uri uri, CustomTabsIntent intent, CustomTabFallback callback) | 设置自定义参数,并打开MiCT页面 |
unbindService(Context context) | 解绑服务 |
release(Context context) | 释放服务,不需要网页相关服务时调用 |
preloadJavascriptInterface(Class<?> clazz) |
(2)AuthCallback
鉴权状态回调
API接口 | 功能 |
onSuccess() | 鉴权成功 |
onError(int code, String message, Bundle extraBundle) | 鉴权失败 |
(3)CustomTabFallback
MiCT打开失败回调
API接口 | 功能 |
void openUri(Context context, Uri uri); | 打开失败处理,使用兜底重新打开页面 |
(4)ConnectionCallback
服务连接状态监听
API接口 | 功能 |
onCustomTabsConnected | 服务连接成功 |
onCustomTabsDisconnected | 服务连接断开 |
(5)CustomTabsCallback
服务能力回调
API接口 | 功能 |
extraCallback(@NonNull String callbackName, @Nullable Bundle args) | 通用能力回调,如网页加载状态 |
onWarmupCompleted(@NonNull Bundle extras) | 预热执行成功 |
1.2 API接口明细
(1)void init(Context context)
功能介绍:全局初始化
接口定义:void int(Context context)
返回值:无
参数说明:
- Context 为当前页面context对象
补充:建议在Application初始化后调用
(2)void auth(Context context, CustomTabsAuth.AuthCallback authCallback)
功能介绍:初始化鉴权
接口定义:void auth(Context context, CustomTabsAuth.AuthCallback authCallback)
返回值:无,通过AuthCallback监听鉴权状态回调
参数说明:
- Context 为当前页面context对象
- AuthCallback 鉴权状态回调处理
补充:建议调用能力之前鉴权,避免功能使用过程中出现异常
示例:
val callback = object : AuthCallback {
override fun onError(code: Int, message: String?, extraBundle: Bundle?) {
Log.d(TAG, "auth failed")
}
override fun onSuccess() {
Log.d(TAG, "auth success")
}
}
CustomTabsHelper.getInstance().auth(this, callback)
(3)prepare(Context context, String url)
功能介绍:预热网页
接口定义:void prepare(Context context, String url)
返回值:无
参数说明:
- url,网页链接,以http/https开头
补充:建议网页加速需求,在View展示时提前调用
示例:
CustomTabsHelper.getInstance().prepare(this, url)
(4)openCustomTab(Context context, Uri uri, CustomTabsIntent intent, CustomTabFallback callback)
功能介绍:打开MiCT页面
接口定义:void openCustomTab(Context context, Uri uri, CustomTabsIntent intent, CustomTabFallback callback)
返回值:无
参数说明:
- uri,网页链接,以http/https开头
- CustomTabsIntent 自定义UI属性设置
- CustomTabFallback 打开失败处理
补充:其他调用方式请查看其重载方法
示例:
CustomTabsHelper.getInstance().openCustomTab(this, uri, CustomTabsIntent.Builder().apply{
setDefaultColorSchemeParams(CustomTabColorSchemeParams.Builder().apply {
// 设置标题栏颜色
setToolbarColor(Color.parseColor("#0D84FF"))
}.build())
// 可选,设置标题栏深色模式颜色,未设置默认适配黑色
setColorSchemeParams(
CustomTabsIntent.COLOR_SCHEME_DARK,
CustomTabColorSchemeParams.Builder().apply {
setToolbarColor(Color.parseColor("#51211E"))
}.build()
setShowTitle(true) // 设置标题显示状态
setShowDomain(false) // 设置地址域名显示状态
setBackIconStyle(true) // 是否显示返回按钮,默认显示 X 按钮
setShowMenu(true) // 是否显示右上角菜单选项
)
}.build())
(5)release(Context context)
功能介绍:释放MiCT服务
接口定义:void release(Context context)
返回值:无
参数说明:
补充:不需要网页服务的地方,调用该方法释放该MiCT服务,优化性能
示例:
CustomTabsHelper.getInstance().release(this)
2、错误码
错误码 | 值 | 描述 | 解决方法 |
RESULT_CODE_ERROR_AUTH_INFO_FETCHING_FAILED | -200 | 鉴权信息获取失败,没有鉴权信息 | 请检查是否AndroidManifest是否正常配置APPID等参数 |
RESULT_CODE_ERROR_AUTH_FAILED | -300 | 鉴权失败,比如三方应用签名问题 | 请检查平台签名是否填写正确 |
五、代码参考demo下载
- 名称:MiBrowserDemo.zip
- 地址:https://kpan.mioffice.cn/webfolder/ext/W7C%23%23LoLG2z%24uVm31GQvyw%40%40?n=0.24732610421319534
- 密码:07DS