Третья часть этого руководства посвящена ускорению запуска браузера с помощью warmup()
и предварительной загрузке веб-страниц с помощью mayLaunchUrl
(). Прогрев процесса браузера позволяет сэкономить до 700мс при открытии ссылки. Предварительная отрисовка контента с помощью mayLaunchUrl
позволяет мгновенно открыть внешний контент. Вместе оба API могут значительно улучшить взаимодействие с пользователем при интеграции пользовательских вкладок, и мы настоятельно рекомендуем их использовать.
Необходимые шаги:
- Проверьте через
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 URL-адреса могут обрабатываться собственными приложениями. Например, если у пользователя установлено приложение Facebook и он нажимает ссылку на публикацию Facebook, он обычно предпочитает, чтобы ссылка открывалась в приложении Facebook, а не в браузере.
По умолчанию пользовательские вкладки открывают ссылки в соответствующем собственном приложении, если оно установлено. Однако после установки CustomTabsServiceConnection
это поведение перестает работать, и вместо этого все URL-адреса открываются в пользовательских вкладках. Для улучшения взаимодействия с пользователем мы рекомендуем повторно включить это поведение, используя следующий код:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setSendToExternalDefaultHandlerEnabled(true)
.build();
Далее: узнайте, как изменить размер пользовательских вкладок .