Web 与外部内容
Web 与外部内容 · androidx.browser
Browser:用 Custom Tabs 打开网页Browser 1.11.0-alpha01
CustomTabsIntent、会话预热、CustomTabsCallback 与 AuthTab 的完整用法。
最后更新 2026-08-01
复制即用:最小启动
val intent = CustomTabsIntent.Builder()
.setToolbarColor(color)
.setColorScheme(CustomTabsIntent.COLOR_SCHEME_SYSTEM)
.build()
intent.launchUrl(context, Uri.parse("https://example.com"))androidx.browser 不做应用内渲染——把页面委托给系统浏览器进程,用 Custom Tabs 让体验接近应用内页面。
会话与预热(减少冷启动)
直接 launchUrl 每次冷启动浏览器进程。绑定服务 + 预热:
// 1. 探测可用浏览器
String packageName = CustomTabsClient.getPackageName(context, null);
// 2. 绑定服务
CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(ComponentName name, CustomTabsClient client) {
client.warmup(0L); // 预热进程
CustomTabsSession session = client.newSession(null);
// 之后的 launchUrl 复用预热进程
}
@Override
public void onServiceDisconnected(ComponentName name) {}
};
CustomTabsClient.bindCustomTabsService(context, packageName, connection);预热价值:后续 launchUrl 复用已预热进程,减少白屏。
会话的回调
CustomTabsSession session = client.newSession(new CustomTabsCallback() {
@Override
public void onNavigationEvent(int navigationEvent, Bundle extras) {
// 导航开始/完成/失败
}
@Override
public void onRelationshipValidationResult(int relation, Uri origin, boolean result, Bundle extras) {
// 域名关系校验(TWA 用)
}
});AuthTab:OAuth 专用页签
AuthTabIntent intent = new AuthTabIntent.Builder()
.setScheme("https")
.setHost("example.com")
.build();
intent.launch(context, Uri.parse("https://example.com/oauth/authorize?..."));- 把 OAuth 流程限定在可信页签内(独立于普通浏览会话)。
- 回跳的 token 交换仍由你的网络层完成——
androidx.browser不管认证状态。
Custom Tabs 变体
| API | 用途 |
|---|---|
CustomTabsIntent | 基本页签(工具栏颜色、动画、关闭按钮) |
CustomTabsSession | 会话 + 预热 + 消息 |
AuthTabIntent | OAuth 专用页签 |
CustomTabsClient.getPackageName | 探测支持浏览器 |
常见陷阱
- 不探测浏览器:设备无支持浏览器时无效果。
- 每次冷启动:不用会话预热,白屏明显。
- OAuth 用普通页签:会话混用,安全边界模糊。
- token 交换放客户端:回跳后要服务端换 token。
复制即用
class BrowserHelper {
fun openInCustomTab(context: Context, url: String) {
val builder = CustomTabsIntent.Builder()
.setShowTitle(true)
.setColorScheme(CustomTabsIntent.COLOR_SCHEME_SYSTEM)
builder.build().launchUrl(context, Uri.parse(url))
}
}要点
- CustomTabsIntent 配置页签;会话预热减少冷启动。
- CustomTabsCallback 接收导航事件;AuthTab 管 OAuth。
- 渲染在系统浏览器,不做应用内 WebView。
- token 交换由服务端完成。