A veces, los desarrolladores de Android necesitan una experiencia web efímera para cumplir con los requisitos de sus apps. Una pestaña personalizada efímera es una pestaña personalizada especializada que inicia un navegador web completamente aislado desde una app. Se puede usar para estrategias de autenticación que no deben sincronizar el estado de acceso con el navegador o las sesiones web en las que no se deben retener los datos, como un modo de navegación privada.
De forma predeterminada, las pestañas personalizadas comparten el estado y las funciones del navegador del usuario. En una pestaña personalizada efímera, las cookies, los archivos almacenados en caché, el historial, las credenciales y otros datos solo existen en el alcance de la instancia de la sesión. Cuando se cierra la Actividad de la pestaña personalizada, los datos se borran sin dejar rastro.
Al igual que las pestañas personalizadas, las pestañas personalizadas efímeras se pueden personalizar con acciones y temas de la IU. Si ya usas la pestaña de autenticación para las estrategias de autenticación, se puede agregar la navegación efímera al intent de inicio, lo que agrega otra capa de privacidad al proceso.
Las pestañas personalizadas efímeras están disponibles a partir de Chrome 130 y se pueden crear instancias con una sola línea de código. En el caso de los usuarios para los que la función no está disponible, puedes validar si la navegación efímera está habilitada y, luego, integrar sin problemas las alternativas de resguardo.
Cómo iniciar una sesión efímera
Las Pestañas personalizadas efímeras requieren la biblioteca del navegador AndroidX. La biblioteca del navegador de AndroidX 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-alpha01'
}
Para crear una sesión de navegación efímera, usa el set personalizado que se proporciona en 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));
Debido a que la navegación efímera se activa con un intent adicional en la implementación estándar de las pestañas personalizadas de Chrome, se pueden agregar personalizaciones al igual que en las pestañas personalizadas típicas.
// 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));
Para los desarrolladores que usan la pestaña de Auth, agrega el set de navegación efímera a AuthTabIntent
:
// Add ephemeral browsing to Auth Tab
AuthTabIntent authTabIntent = new AuthTabIntent.Builder()
.setEphemeralBrowsingEnabled(true)
.build();
authTabIntent.launch(launcher, uri, redirectScheme);
Algunas personalizaciones se modifican o no están disponibles en una pestaña efímera:
- El historial no se registra en una sesión efímera.
- Los usuarios no pueden descargar la página actual.
- Se inhabilitó la opción de mantener presionado un vínculo para abrirlo en una pestaña nueva de Chrome.
- La opción para abrir la página actual en el navegador predeterminado con el menú ampliado inicia una ventana del navegador en modo Incógnito.
Cómo volver a implementaciones anteriores
No todos los dispositivos de los usuarios pueden iniciar pestañas personalizadas efímeras. Para controlar estos casos, los desarrolladores pueden usar CustomTabsClient
para consultar el navegador subyacente y determinar si se admite la navegación efímera. Esto requiere una conexión de servicio a CustomTabsClient
. Para lograrlo, inicia un nuevo CustomTabsServiceConnection
para acceder al CustomTabsClient
proporcionado después de una vinculación correcta.
// 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);
Las apps que publican contenido para usuarios que aún no tienen acceso a las pestañas personalizadas efímeras pueden usar otros métodos, como un WebView con el almacenamiento en caché inhabilitado. En la biblioteca de Android Browser Helper, se encuentra un ejemplo de una implementación que aprovecha las pestañas personalizadas efímeras con resguardo a WebView.