Улучшите конфиденциальность пользователей в Интернете с помощью временных пользовательских вкладок.

Разработчикам Android иногда требуется эфемерный веб-опыт для удовлетворения требований их приложений. Эфемерная пользовательская вкладка — это специализированная пользовательская вкладка, которая запускает полностью изолированный веб-браузер из приложения. Это может использоваться для стратегий аутентификации, которые не должны синхронизировать состояние входа с браузером или веб-сеансами, где данные не должны сохраняться, например, режим приватного просмотра.

По умолчанию пользовательские вкладки делятся состоянием и функциями из браузера пользователя. В эфемерной пользовательской вкладке файлы cookie, кэшированные файлы, история, учетные данные и другие данные существуют только в рамках экземпляра сеанса. Когда действие пользовательской вкладки закрывается, данные удаляются без следа.

Подобно пользовательским вкладкам, эфемерную пользовательскую вкладку можно настраивать с помощью действий и тем пользовательского интерфейса. Если вы уже используете Auth Tab для стратегий аутентификации, эфемерный просмотр можно добавить к намерению запуска, добавив еще один уровень конфиденциальности в процесс.

Эфемерные пользовательские вкладки доступны с Chrome 136 и могут быть созданы с помощью одной строки кода. Для пользователей, у которых эта функция недоступна, вы можете проверить, включен ли эфемерный просмотр, и легко интегрировать резервные альтернативы.

Проверьте, поддерживается ли временный просмотр

Для Ephemeral Custom Tabs требуется библиотека браузера 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 :

// 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 Tab, добавьте эфемерный сеттер просмотра в AuthTabIntent :

// Add ephemeral browsing to Auth Tab

AuthTabIntent authTabIntent = new AuthTabIntent.Builder()
    .setEphemeralBrowsingEnabled(true)
    .build();
authTabIntent.launch(launcher, uri, redirectScheme);

Некоторые настройки изменены или недоступны на временной вкладке:

  • История не сохраняется в эфемерном сеансе.
  • Пользователи не могут загрузить текущую страницу.
  • Длительное нажатие на ссылку для открытия в новой вкладке Chrome отключено.
  • Возможность открыть текущую страницу в браузере по умолчанию с помощью раскрывающегося меню запускает окно браузера в режиме инкогнито.

Возврат к предыдущим реализациям

Не все пользовательские устройства имеют возможность запуска в Ephemeral Custom Tabs. Чтобы справиться с этими случаями, разработчики могут использовать 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);

Приложения, обслуживающие пользователей, у которых пока нет доступа к Ephemeral Custom Tabs, могут использовать другие методы, например WebView с отключенным кэшированием. Пример реализации, которая использует Ephemeral Custom Tabs с откатом к WebView, можно найти в библиотеке Android Browser Helper .

Дополнительные ресурсы