La pestaña de autenticación proporciona un flujo de autenticación seguro y simplificado para usar en apps para Android. Si creas y lanzas un objeto AuthTabIntent
, puedes invocar una pestaña personalizada especializada diseñada para administrar una experiencia de autenticación de extremo a extremo. La pestaña se simplificó y tiene capacidades limitadas, lo que permite que los usuarios se enfoquen en la tarea que están realizando. Cuando se completa, la pestaña realiza una devolución de llamada a tu aplicación con un resultado que usa HTTPS o esquemas personalizados.


A partir de Chrome 137, la pestaña de autenticación puede reemplazar directamente las integraciones de autenticación de pestañas personalizadas existentes. En el caso de los usuarios cuyos dispositivos no admiten la pestaña de autenticación, se recurre automáticamente a las pestañas personalizadas. Para migrar de pestañas personalizadas a la pestaña de autenticación, debes modificar algunas líneas de código.
Cómo funciona
Con la pestaña de autenticación, una app cliente inicia una pestaña personalizada especializada que presenta una ventana del navegador que carga una URL con la página de autenticación esperada. Una vez que se completa, la pestaña de Auth devuelve el resultado de la autenticación con una devolución de llamada.
Después de la autenticación, cuando se produce una navegación al URI de redireccionamiento de devolución de llamada proporcionado anteriormente, el redireccionamiento se captura y se devuelve a la aplicación cliente a través de la devolución de llamada. En el caso de los redireccionamientos que usan el esquema https, el navegador verifica que el dominio de redireccionamiento y la app cliente pertenezcan al mismo publicador a través de Digital Asset Links.
El cliente recibe el URI al que se navegó con el esquema de redireccionamiento (o, para https, el host y la ruta de redireccionamiento) a través de la devolución de llamada proporcionada. Estos datos incluyen un código de resultado y cualquier otro dato que proporcione la interfaz de autenticación. Puedes usar estos datos para verificar la autenticación o controlar situaciones no exitosas.
¿Por qué la pestaña de autorización?
Antes de la pestaña de autenticación, podías usar un intent de pestañas personalizadas estándar para potenciar los flujos de autenticación. Es preferible usar una pestaña de autorización porque proporciona mayor seguridad, una experiencia optimizada y también abstrae algunos de los detalles internos de la autenticación del código del cliente. Por estos motivos, verás que la pestaña Autorización brinda una mejor experiencia.
Seguridad mejorada
En una implementación típica de pestañas personalizadas, se requiere un intent para recibir datos de la ventana del navegador que controla la autenticación. Esto requiere código adicional y expone tu app a posibles interferencias en tu intención. Con una pestaña de autorización, los datos se reciben a través de una devolución de llamada, con transferencia directa de datos entre la API de Android y la app cliente.
Una experiencia optimizada
En una pestaña personalizada, el usuario tiene acceso a funciones adicionales en el navegador que podrían no ser deseadas para un flujo de autenticación. La pestaña de autorización proporciona una experiencia simplificada que quita la mayoría de las opciones de personalización disponibles en una pestaña personalizada estándar. En el caso de los navegadores Chrome, esto incluye el botón de minimizar, el menú contextual de presión prolongada y la función Tocar para buscar, así como los elementos del menú para abrir en Chrome, agregar a favoritos, descargar y compartir, y agregar a la pantalla principal.
Las pestañas de autenticación aún conservan funciones para que el navegador autocomplete contraseñas y pagos guardados anteriormente, navegue hacia atrás o hacia adelante, actualice, muestre información de la página, solicite una versión de escritorio de la página y proporcione traducción.
Abstracción de datos
La implementación de la pestaña de autenticación por sí sola elimina la necesidad de una intención para recibir datos del navegador, así como los filtros de intención en AndroidManifest.xml
que se requerían anteriormente para que la autenticación funcionara correctamente. Esto elimina la complejidad del lado del cliente. Algunas de estas funciones aún se pueden incluir en el código del cliente para proporcionar compatibilidad con versiones anteriores de las pestañas personalizadas en situaciones en las que la pestaña de autenticación no está disponible en los dispositivos de los usuarios.
Implementa la pestaña de autenticación
La pestaña de autenticación requiere la biblioteca de autenticación del navegador AndroidX. La biblioteca de AndroidX Browser se puede agregar en la sección de dependencias del archivo build.gradle
de un proyecto. Las APIs están disponibles en una compilación alfa. Agrega lo siguiente a tu archivo de compilación:
dependencies {
implementation 'androidx.browser:browser:1.9.0'
}
Antes de lanzar una pestaña de autenticación, declara un ActivityResultLauncher
que tome un ActivityResultCaller
y un ActivityResultCallback
. Esto se hace antes de que se cree la actividad o el fragmento:
// 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();
}
A continuación, usa AuthTabIntent.Builder
para compilar un AuthTabIntent
y, luego, llama al método launch
. Los métodos de lanzamiento aceptan uno de los dos conjuntos de parámetros según el esquema que necesites:
redirectScheme: Para un esquema de redireccionamiento personalizado, el navegador redirecciona y devuelve el URI con el esquema proporcionado.
redirectHost, redirectPath: Para los esquemas de redireccionamiento HTTPS, la API requiere un host y una ruta de acceso independientes para que el navegador detecte el redireccionamiento y muestre el URI. Cuando se usa HTTPS, se requiere la verificación de los Vínculos de recursos digitales.
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);
}
Migra de pestañas personalizadas a la pestaña de autenticación
Actualiza tu implementación de autenticación de pestañas personalizadas existente modificando tu intent de pestañas personalizadas al nuevo intent de pestaña de autenticación. Después de agregar el código, busca el intent de pestañas personalizadas y modifícalo por el nuevo intent de la pestaña de autenticación.
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);
Resguardo en pestañas personalizadas
Algunas implementaciones pueden requerir autenticación cuando el dispositivo del usuario no está equipado para controlar la pestaña de autenticación. Por ejemplo, esto puede ocurrir si el navegador predeterminado no admite la pestaña de autorización o si la versión del navegador predeterminado no está en el nivel requerido. En estos casos, una intención de la pestaña de autorización inicia automáticamente una pestaña personalizada en su lugar para los navegadores que admiten pestañas personalizadas.
Puedes verificar si el navegador admite la pestaña de autorización con CustomTabsClient#isAuthTabSupported()
. Este método permite que tu app elija de forma dinámica entre iniciar una pestaña de autenticación o un flujo de pestañas personalizadas según las capacidades del navegador. Para controlar correctamente la situación en la que no se admite la pestaña de autenticación, agrega la implementación de la pestaña de autenticación y mantén el código existente de pestañas personalizadas que controla los flujos de autenticación como alternativa.
Ten cuidado al controlar los datos que pueden llegar a tu ActivityResultCallback
o a tu intent de Activity. Ten en cuenta que, si se usa AuthTabIntent
para iniciar la experiencia de resguardo y la pestaña de autenticación no es compatible con el navegador actual, tu app recibirá un resultado Activity.RESULT_CANCELED
cuando se cierre la pestaña personalizada.
En la biblioteca de Android Browser Helper, puedes encontrar un ejemplo de implementación de la pestaña de autenticación con una alternativa de pestañas personalizadas.