Android デベロッパーは、アプリの要件を満たすために、エフェメラル ウェブ エクスペリエンスが必要になることがあります。エフェメラル カスタムタブは、アプリ内から完全に分離されたウェブブラウザを起動する専用のカスタムタブです。これは、ログイン状態をブラウザと同期しない認証戦略や、データが保持されないウェブセッション(プライベート ブラウジング モードなど)に使用できます。
デフォルトでは、カスタムタブはユーザーのブラウザの状態と機能を共有します。エフェメラル カスタムタブでは、Cookie、キャッシュに保存されたファイル、履歴、認証情報などのデータは、セッションのインスタンスのスコープ内にのみ存在します。カスタムタブ アクティビティが閉じられると、データは跡形もなく削除されます。
カスタムタブと同様に、エフェメラル カスタムタブはアクションと UI テーマ設定でカスタマイズできます。認証戦略に Auth Tab をすでに使用している場合は、起動インテントにエフェメラル ブラウジングを追加して、プロセスのプライバシー保護を強化できます。
エフェメラル カスタムタブは Chrome 130 以降で利用可能で、1 行のコードでインスタンス化できます。この機能を利用できないユーザーに対しては、エフェメラル ブラウジングが有効になっているかどうかを検証し、フォールバック オプションをシームレスに統合できます。
エフェメラル セッションを開始する
エフェメラル カスタムタブには AndroidX ブラウザ ライブラリが必要です。AndroidX ブラウザ ライブラリは、プロジェクトの build.gradle
ファイルの依存関係セクションに追加できます。この API はアルファ版ビルドで利用できます。ビルドファイルに以下を追加します。
dependencies {
implementation 'androidx.browser:browser:1.9.0-alpha01'
}
エフェメラル ブラウジング セッションを作成するには、CustomTabsIntent
で提供されているカスタム セッターを使用します。
// In your activity
String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setEphemeralBrowsingEnabled(true)
.build();
customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));
エフェメラル ブラウジングは、標準の Chrome カスタムタブの実装でインテント エクストラによってトリガーされるため、通常のカスタムタブと同様にカスタマイズを追加できます。
// Add customizations
String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setEphemeralBrowsingEnabled(true)
.setUrlBarHidingEnabled(false)
.setShareState(CustomTabsIntent.SHARE_STATE_OFF)
.setCloseButton(BitmapFactory.decodeResource(getResources(), R.drawable.ic_back_arrow))
.build();
customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));
Auth Tab を使用しているデベロッパーは、AuthTabIntent
にエフェメラル ブラウジング セッターを追加します。
// Add ephemeral browsing to Auth Tab
AuthTabIntent authTabIntent = new AuthTabIntent.Builder()
.setEphemeralBrowsingEnabled(true)
.build();
authTabIntent.launch(launcher, uri, redirectScheme);
一部のカスタマイズは、エフェメラル タブで変更されるか、使用できなくなります。
- エフェメラル セッションでは履歴が記録されません。
- ユーザーは現在のページをダウンロードできません。
- リンクを長押しして新しい Chrome タブで開く機能は無効になっています。
- オーバーフロー メニューで現在のページをデフォルトのブラウザで開くオプションを選択すると、シークレット モードのブラウザ ウィンドウが起動します。
以前の実装にフォールバックする
すべてのユーザーのデバイスで、エフェメラル カスタムタブを起動できるわけではありません。このようなケースに対応するには、CustomTabsClient
を使用して基盤となるブラウザにクエリを実行し、エフェメラル ブラウジングがサポートされているかどうかを判断します。これには、CustomTabsClient
へのサービス接続が必要です。これを実現するには、新しい CustomTabsServiceConnection
を起動して、バインディングの成功後に提供された CustomTabsClient
にアクセスします。
// in your activity
CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(@NonNull ComponentName name, @NonNull CustomTabsClient client) {
CustomTabsSession session = client.newSession(null);
try {
if (session.isEphemeralBrowsingSupported(Bundle.EMPTY)) {
// launch ephemeral tab
} else {
// fallback
}
} catch (RemoteException e) {
// fallback
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) { }
};
CustomTabsClient.bindCustomTabsService(this, "com.android.chrome", connection);
エフェメラル カスタムタブにまだアクセスできないユーザーにサービスを提供するアプリは、キャッシュが無効になっている WebView など、他の方法を使用できます。WebView にフォールバックするエフェメラル カスタムタブを活用した実装の例については、Android ブラウザ ヘルパー ライブラリをご覧ください。