인증 탭은 Android 앱에서 사용할 수 있는 안전하고 간소화된 인증 흐름을 제공합니다. AuthTabIntent
를 만들고 실행하면 엔드 투 엔드 인증 환경을 관리하도록 설계된 특수 맞춤 탭을 호출할 수 있습니다. 탭은 간소화되어 있으며 기능이 제한되어 있어 사용자가 현재 작업에 집중할 수 있습니다. 완료되면 탭이 https 또는 맞춤 스키마를 사용하여 결과와 함께 애플리케이션을 다시 호출합니다.


Chrome 132부터 Auth Tab은 기존의 맞춤 탭 인증 통합을 직접 대체할 수 있습니다. 기기에서 인증 탭을 지원하지 않는 사용자의 경우 맞춤 탭으로 자동 대체됩니다. 맞춤 탭에서 인증 탭으로 이전하려면 코드 몇 줄만 수정하면 됩니다.
작동 방식
Auth Tab을 사용하면 클라이언트 앱이 예상되는 인증 페이지가 포함된 URL을 로드하는 브라우저 창을 표시하는 특수 맞춤 탭을 실행합니다. 완료되면 인증 탭은 콜백을 사용하여 인증 결과를 반환합니다.
인증 후 이전에 제공된 콜백 리디렉션 URI로 이동하면 리디렉션이 캡처되고 콜백을 사용하여 클라이언트 애플리케이션으로 반환됩니다. https 스키마를 사용하는 리디렉션의 경우 브라우저는 디지털 애셋 링크를 사용하여 리디렉션 도메인과 클라이언트 앱이 동일한 게시자가 소유하고 있는지 확인합니다.
클라이언트는 제공된 콜백을 사용하여 리디렉션 스킴 (또는 https의 경우 리디렉션 호스트 및 경로)이 포함된 탐색된 URI를 수신합니다. 이 데이터에는 결과 코드와 인증 인터페이스에서 제공하는 기타 데이터가 포함됩니다. 이 데이터를 사용하여 인증을 확인하거나 실패한 시나리오를 처리할 수 있습니다.
인증 탭을 사용해야 하는 이유
인증 탭 이전에는 표준 맞춤 탭 인텐트를 사용하여 인증 흐름을 지원할 수 있었습니다. 인증 탭은 향상된 보안, 간소화된 환경을 제공하고 클라이언트 코드에서 인증을 위한 일부 내부 항목을 추상화하므로 권장됩니다. 이러한 이유로 인증 탭이 더 나은 환경을 제공합니다.
향상된 보안
일반적인 맞춤 탭 구현에서는 인증을 처리하는 브라우저 창에서 데이터를 수신하는 데 인텐트가 필요합니다. 이렇게 하면 추가 코드가 필요하며 앱이 인텐트의 잠재적 간섭에 노출됩니다. 인증 탭을 사용하면 Android API와 클라이언트 앱 간에 직접 데이터를 전송하여 콜백을 사용하여 데이터를 수신합니다.
간소화된 환경
맞춤 탭에서는 사용자가 브라우저의 추가 기능에 액세스할 수 있으며, 이러한 기능은 인증 흐름에 원치 않을 수 있습니다. 인증 탭은 표준 맞춤 탭에서 사용할 수 있는 대부분의 맞춤설정 옵션을 삭제한 간소화된 환경을 제공합니다. Chrome 브라우저의 경우 최소화 버튼, 길게 누르기 컨텍스트 메뉴, 터치 투 서치, Chrome에서 열기, 북마크, 다운로드 및 공유, 홈 화면에 추가 메뉴 항목이 여기에 해당합니다.
인증 탭은 브라우저에서 이전에 저장된 비밀번호와 결제를 자동 완성하고, 뒤로 또는 앞으로 이동하고, 새로고침하고, 페이지 정보를 표시하고, 페이지의 데스크톱 버전을 요청하고, 번역을 제공하는 기능을 계속 유지합니다.
데이터 추상화
인증 탭만 구현하면 인텐트가 브라우저에서 데이터를 수신할 필요가 없으며 이전에 인증이 제대로 작동하는 데 필요했던 AndroidManifest.xml
의 인텐트 필터도 필요하지 않습니다. 이렇게 하면 클라이언트 측의 복잡성이 제거됩니다. 이러한 기능 중 일부는 사용자 기기에서 인증 탭을 사용할 수 없는 상황에서 맞춤 탭과의 하위 호환성을 제공하기 위해 클라이언트 코드에 포함될 수 있습니다.
인증 탭 구현
인증 탭에는 AndroidX 브라우저 인증 라이브러리가 필요합니다. AndroidX 브라우저 라이브러리는 프로젝트의 build.gradle
파일의 종속 항목 섹션에 추가할 수 있습니다. 이 API는 알파 빌드에서 사용할 수 있습니다. 빌드 파일에 다음을 추가합니다.
dependencies {
implementation 'androidx.browser:browser:1.9.0-alpha01'
}
인증 탭을 실행하기 전에 ActivityResultCaller
및 ActivityResultCallback
를 사용하는 ActivityResultLauncher
를 선언합니다. 이는 활동 또는 프래그먼트가 생성되기 전에 이루어집니다.
// In your activity
private final ActivityResultLauncher<Intent> mLauncher =
AuthTabIntent.registerActivityResultLauncher(this, this::handleAuthResult);
private void handleAuthResult(AuthResult result) {
String message = switch (result.resultCode) {
case AuthTabIntent.RESULT_OK -> "Received auth result.";
case AuthTabIntent.RESULT_CANCELED -> "AuthTab canceled.";
case AuthTabIntent.RESULT_VERIFICATION_FAILED -> "Verification failed.";
case AuthTabIntent.RESULT_VERIFICATION_TIMED_OUT -> "Verification timed out.";
}
if (result.resultCode == AuthTabIntent.RESULT_OK) {
message += " Uri: " + result.resultUri;
}
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
그런 다음 AuthTabIntent.Builder
를 사용하여 AuthTabIntent
를 빌드한 후 launch
메서드를 호출합니다. 실행 메서드는 필요한 스키마에 따라 두 가지 매개변수 집합 중 하나를 허용합니다.
redirectScheme: 맞춤 리디렉션 스킴의 경우 브라우저가 제공된 스킴이 포함된 URI를 리디렉션하고 반환합니다.
redirectHost, redirectPath: https 리디렉션 스킴의 경우 API에는 브라우저가 리디렉션을 감지하고 URI를 반환할 수 있는 별도의 호스트와 경로가 필요합니다. https를 사용하는 경우 디지털 애셋 링크 확인이 필요합니다.
private void launchAuthTab() {
AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth"), "mycustomscheme");
}
private void launchAuthTabHttps() {
String host = "your_host";
String path = "your_path";
AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);
}
맞춤 탭에서 인증 탭으로 이전
맞춤 탭 인텐트를 새 인증 탭 인텐트로 수정하여 기존 맞춤 탭 인증 구현을 업데이트합니다. 코드를 추가한 후 맞춤 탭 인텐트를 찾아 새 인증 탭 인텐트로 수정합니다.
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.launchUrl(context, uri)
// change to -->
AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", "mycustomscheme");
/* - OR - */
authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);
맞춤 탭으로 대체
사용자의 기기에서 인증 탭을 처리할 수 없는 경우 일부 구현에서는 인증이 필요할 수 있습니다. 예를 들어 기본 브라우저가 인증 탭을 지원하지 않거나 기본 브라우저 버전이 필요한 수준이 아닌 경우 이러한 오류가 발생할 수 있습니다. 이 경우 맞춤 탭을 지원하는 브라우저의 경우 인증 탭 인텐트가 맞춤 탭 대신 자동으로 맞춤 탭을 실행합니다.
이 상황을 원활하게 처리하려면 인증 탭 구현을 추가하면서 인증 흐름을 처리하는 기존 맞춤 탭 코드를 대체로 유지합니다.
인증 탭 지원 기기를 사용하는 사용자에게는 새 인증 탭 흐름이 표시되고, 그렇지 않은 사용자에게는 기존 맞춤 탭 구현이 대체로 사용됩니다. ActivityResultCallback
또는 Activity 인텐트로 올 수 있는 데이터를 처리할 때는 주의하세요. AuthTabIntent
가 대체 환경을 실행하는 데 사용되고 현재 브라우저에서 인증 탭이 지원되지 않는 경우 맞춤 탭이 닫힐 때 앱은 Activity.RESULT_CANCELED
결과를 수신합니다.
맞춤 탭으로 대체하는 인증 탭 구현의 예는 Android 브라우저 도우미 라이브러리에서 확인할 수 있습니다.