Разработчикам Android иногда требуется временный веб-интерфейс, чтобы удовлетворить требования своих приложений. Эфемерная пользовательская вкладка — это специализированная пользовательская вкладка, которая запускает полностью изолированный веб-браузер из приложения. Это можно использовать для стратегий аутентификации, которые не должны синхронизировать состояние входа в систему с браузером или веб-сессиями, в которых данные не должны сохраняться, например в режиме частного просмотра.
По умолчанию пользовательские вкладки используют состояние и функции браузера пользователя. На временной настраиваемой вкладке файлы cookie, кэшированные файлы, история, учетные данные и другие данные существуют только в пределах экземпляра сеанса. Когда действие настраиваемой вкладки закрывается, данные удаляются бесследно.
Как и пользовательские вкладки, временную пользовательскую вкладку можно настроить с помощью действий и тем пользовательского интерфейса. Если вы уже используете вкладку «Аутентификация» для стратегий аутентификации, к намерению запуска можно добавить временный просмотр, добавив в процесс еще один уровень конфиденциальности.
Эфемерные пользовательские вкладки доступны в Chrome 130 и могут быть созданы с помощью одной строки кода. Для пользователей, которым эта функция недоступна, вы можете проверить, включен ли временный просмотр, и легко интегрировать резервные альтернативы.
Запуск временного сеанса
Для эфемерных пользовательских вкладок требуется библиотека браузера 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, добавьте установщик эфемерного просмотра в 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 .