Третья часть этого руководства посвящена Службе пользовательских вкладок и тому, почему ее использование в вашем приложении улучшает взаимодействие с пользователем:
- Мгновенно открывайте внешний контент: использование
warmup()
заставляет процесс браузера запускаться в фоновом режиме еще до того, как пользователь нажмет на ссылку, и может сэкономить до 700 мс при открытии ссылки.mayLaunchUrl()
предварительно загружает страницы. Совместное использование обоих API позволяет страницам загружаться мгновенно, что значительно улучшает взаимодействие с пользователем при интеграции пользовательских вкладок. - Улучшенная обработка свернутых пользовательских вкладок : подключившись к службе пользовательских вкладок и используя тот же
CustomTabSession
при запуске пользовательской вкладки, Chrome сможет удалить ранее свернутые пользовательские вкладки перед запуском новой вкладки, обеспечивая более единообразный пользовательский интерфейс.
Необходимые шаги:
- Проверьте, поддерживает ли браузер по умолчанию пользовательские вкладки, используя
CustomTabsClient.getPackageName(...)
. Если да, привяжитесь к CustomTabsService с помощьюCustomTabsClient.bindCustomTabsService()
. После подключения к CustomTabsService в обратном вызове
CustomTabsServiceConnection.onCustomTabsServiceConnected()
выполните:а. Разогрейте процесс браузера с помощью
CustomTabsClient.warmup()
. б. Создайте новыйCustomTabsSession
, используяCustomTabsClient.newSession()
.При желании можно предварительно загрузить веб-страницы, которые пользователь, скорее всего, посетит, используя
CustomTabsSession.mayLaunchUrl()
.При запуске новой настраиваемой вкладки передайте
CustomTabsSession
в CustomTabsIntent.Builder с помощью конструктораnew CustomTabsIntent.Builder(session)
.
Если ваше приложение предназначено для уровня Android API 30 , CustomTabsClient.getPackageName(...)
требует, чтобы вы добавили раздел запросов в манифест Android, объявив фильтр намерений, который соответствует браузерам с поддержкой пользовательских вкладок.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> … <queries> <intent> <action android:name="android.support.customtabs.action.CustomTabsService" /> </intent> </queries> </manifest>
Вот полный пример подключения к службе пользовательских вкладок:
private CustomTabsClient mClient; private CustomTabsSession mSession; private CustomTabsServiceConnection mConnection = new CustomTabsServiceConnection() { @Override public void onCustomTabsServiceConnected( @NonNull ComponentName name, @NonNull CustomTabsClient client ) { mClient = client; // Warm up the browser process mClient.warmup(0 /* placeholder for future use */); // Create a new browser session mSession = mClient.newSession(new CustomTabsCallback()); // Pre-render pages the user is likely to visit // you can do this any time while the service is connected mSession.mayLaunchUrl(Uri.parse("https://developers.android.com"), null, null); } @Override public void onServiceDisconnected(ComponentName name) { mClient = null; mSession = null; } }; private void bindCustomTabService(Context context) { // Check for an existing connection if (mClient != null) { // Do nothing if there is an existing service connection return; } // Get the default browser package name, this will be null if // the default browser does not provide a CustomTabsService String packageName = CustomTabsClient.getPackageName(context, null); if (packageName == null) { // Do nothing as service connection is not supported return; } CustomTabsClient.bindCustomTabsService(context, packageName, mConnection); } @Override protected void onCreate(Bundle savedInstanceState) { … bindCustomTabService(this); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String url = "https://developers.android.com"; CustomTabsIntent intent = new CustomTabsIntent.Builder(mSession) .build(); intent.launchUrl(MainActivity.this, Uri.parse(url)); } }); }
Открытие ссылок в приложениях Android
На Android URL-адреса могут обрабатываться приложениями Android. Например, если у пользователя установлено приложение Facebook и он нажимает ссылку на публикацию Facebook, он обычно предпочитает, чтобы ссылка открывалась в приложении Facebook, а не в браузере.
По умолчанию «Пользовательские вкладки» открывают ссылки в соответствующем приложении Android, если оно установлено. Однако после установки CustomTabsServiceConnection
это поведение перестает работать, и вместо этого все URL-адреса открываются в пользовательских вкладках. Для улучшения взаимодействия с пользователем мы рекомендуем повторно включить это поведение, используя следующий код:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder() .setSendToExternalDefaultHandlerEnabled(true) .build();
Далее: узнайте, как изменить размер пользовательских вкладок .