どっこと備忘録群

アウトプットしないとインプットできない私が Androidアプリ開発をメインとした備忘録を載せています。

Custom Tabs を扱う

Custom Tabsはアプリ内でウェブコンテンツを表示するためのブラウザ機能。 以前使用されていた **WebView**は、セキュリティや表示速度の面で問題があるが、 Chrome Custom TabsはChromeの機能を利用するため、より高速で安全なウェブ体験をユーザーに提供できる。

Custom Tab の導入

Custom Tabsの導入手順は以下の3ステップ。

  1. **app/build.gradle**に依存関係を追加する。
  2. **CustomTabIntent.Builder**を使って CustomTabIntent を生成する。
  3. **CustomTabIntent.launchUrl**を実行する。

1. app/build.gradleに依存関係を追加

app/build.gradledependenciesスコープに以下のライブラリを追加する。

dependencies {
    // 既存の dependencies に以下を追加する
    implementation "androidx.browser:browser:1.8.0"
}

2. CustomTabIntent.Builderの生成

CustomTabsIntent.Builderを使用してCustomTabsIntentのインスタンスを生成する。

val builder = CustomTabsIntent.Builder()
val customTabIntent = builder.build()

3. CustomTabIntent.launchUrlを実行する

生成したCustomTabsIntentlaunchUrl関数で、アクセスしたいWebページのURL(Uriオブジェクト)を指定し起動する。

customTabIntent.launchUrl(this@MainActivity, Uri.parse("https://www.google.co.jp/"))

Custom Tabsの表示をカスタマイズしたい

CustomTabsIntent.Builderに対して、様々なパラメータを設定することで、Custom Tabsのツールバーの色やアクションボタンなどをカスタマイズできる。詳細は公式ドキュメントを参照。

認証に利用する

OAuthなどの認証フローにCustom Tabsを利用する場合、より簡単に実装できるようにするための**AuthTabIntent**が利用可能。

従来の認証フローでは、認証完了後にアプリに戻るためのリダイレクトURLのハンドリングが必要だが、 AuthTabIntentを使うとこの処理の一部をライブラリ側で制御してくれるようになる。

参考: 認証 タブを使用して認証を簡素化する | Chrome for Developers

Custom Tabsから戻ってきたことを検知したい

CustomTabsIntent.launchUrlは結果を返さないため、Custom Tabsが閉じられたことを直接検知する公式な方法は公開されていない。

以下のようにCustomTabsIntent内のintentを取り出し、activityResultLauncherを使って起動することで実現可能だが、 これはlaunchUrlというシンプルなインターフェースが用意されている観点から、推奨される使い方ではない点に注意が必要。

val intent = customTabIntent.intent.also {
    it.setData(Uri.parse("https://www.google.co.jp/"))
}
// registerForActivityResult で生成した activityResultLauncher を使って呼び出し
launcher.launch(intent)

参考

最終更新: 2025.9.28