임시 맞춤 탭으로 사용자의 웹 개인 정보 보호 개선

Android 개발자는 앱 요구사항을 충족하기 위해 일시적인 웹 환경이 필요한 경우가 있습니다. 임시 맞춤 탭은 앱 내에서 완전히 격리된 웹브라우저를 실행하는 특수 맞춤 탭입니다. 이는 로그인 상태를 브라우저와 동기화해서는 안 되거나 데이터를 보관해서는 안 되는 웹 세션(예: 시크릿 모드)에 사용할 수 있는 인증 전략입니다.

기본적으로 맞춤 탭은 사용자의 브라우저에서 상태와 기능을 공유합니다. 임시 맞춤 탭에서는 쿠키, 캐시된 파일, 기록, 사용자 인증 정보, 기타 데이터가 세션 인스턴스의 범위 내에만 존재합니다. 맞춤 탭 활동이 닫히면 데이터가 흔적 없이 삭제됩니다.

맞춤 탭과 마찬가지로 임시 맞춤 탭은 작업 및 UI 테마 설정으로 맞춤설정할 수 있습니다. 이미 인증 전략에 인증 탭을 사용하고 있다면 실행 인텐트에 일시적인 탐색을 추가하여 프로세스에 또 다른 개인 정보 보호 레이어를 추가할 수 있습니다.

일회성 맞춤 탭은 Chrome 136부터 사용할 수 있으며 한 줄의 코드로 인스턴스화할 수 있습니다. 이 기능을 사용할 수 없는 사용자의 경우 일시적인 탐색이 사용 설정되어 있는지 확인하고 대체 방법을 원활하게 통합할 수 있습니다.

일회성 탐색이 지원되는지 확인

임시 맞춤 탭에는 AndroidX 브라우저 라이브러리가 필요합니다. AndroidX 브라우저 라이브러리는 프로젝트의 build.gradle 파일의 종속 항목 섹션에 추가할 수 있습니다. 이 API는 알파 빌드에서 사용할 수 있습니다. 빌드 파일에 다음을 추가합니다.

dependencies {
    implementation 'androidx.browser:browser:1.9.0-alpha05'
}

CustomTabsClient#isEphemeralBrowsingSupported(Context, String)를 사용하여 일시적인 탐색이 지원되는지 확인할 수 있습니다.

// In your activity

if (CustomTabsClient.isEphemeralBrowsingSupported(this, provider)) {
    ...
}

여기서 provider은 사용할 웹브라우저의 패키지 이름입니다. 맞춤 탭을 지원하는 브라우저의 패키지 이름을 가져오려면 Android 기기에 맞춤 탭을 지원하는 브라우저가 있는지 확인을 참고하세요.

임시 세션 실행

일시적인 브라우징 세션을 만들려면 CustomTabsIntent에 제공된 맞춤 setter를 사용하세요.

// 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));

인증 탭을 사용하는 개발자의 경우 AuthTabIntent에 임시 탐색 setter를 추가합니다.

// 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 브라우저 도우미 라이브러리에서 확인할 수 있습니다.

추가 리소스