Chrome custom tabs что это
A complete example is available on the GitHub sample application. It contains re-usable classes to customize the UI, connect to the background service, and handle the lifecycle of both the application and the custom tab activity.
If you follow the guidance from this page, you will be able to create a great integration.
The first step for a Custom Tabs integration is adding the AndroidX Browser Library to your project. Open the app/build.gradle file and add the browser library to the dependencies section.
Once the Browser Library is added to your project there are two sets of possible customizations:
- Customizing the UI and interaction with the custom tabs.
- Making the page load faster, and keeping the application alive.
The UI Customizations are done by using the CustomTabsIntent and the CustomTabsIntent.Builder classes; the performance improvements are achieved by using the CustomTabsClient to connect to the Custom Tabs service, warm-up the browser and let it know which urls will be opened.
A CustomTabsIntent.Builder can be used to configure a Custom Tab. Once ready, call CustomTabsIntent.Builder.build to create a CustomTabsIntent and launch the desired Url with CustomTabsIntent.launchUrl .
One of the most important (and simplest to implement) aspects of Custom Tabs is the ability for you to change the color of the address bar to be consistent with your app's theme.
The snippet below changes the background color for the address bar. colorInt is an int that specifies a Color .
As the developer of your app, you have full control over the Action Button that is presented to your users inside the browser tab.
In most cases, this will be a primary action such as Share, or another common activity that your users will perform.
The Action Button is represented as a Bundle with an icon of the action button and a PendingIntent that will be called by the browser when your user hits the action button. The icon is currenlty 24dp in height and 24-48 dp in width.
The browser has a comprehensive menu of actions that users will perform frequently inside a browser, however they may not be relevant to your application context.
Custom Tabs will have a set of default actions provided by the browser. Those actions can include items like "Forward", "Page Info", "Refresh", "Find in Page" or "Open in Browser".
As the developer, you can add and customize up to five menu items that will appear between the icon row and foot items.
Many Android applications use custom View Entrance and Exit animations when transitioning between Activities on Android. Custom Tabs is no different, you can change the entrance and exit (when the user presses Back) animations to keep them consistent with the rest of your application.
We believe that users demand a near instantaneous experience, so we have provided a Service that your app can connect to and tell the browser and its native components to warm up. Custom Tabs also provide the ability for you, the developer to tell the browser the likely set of web pages the user will visit. Browsers will then be able to perform:
The process for warming up the browser is as follows:
Create a class that extends CustomTabsServiceConnection and use onCustomTabsServiceConnected to get an instance of the CustomTabsClient . This instance will be needed on the next steps.
Warms up the browser process and loads the native libraries. Warmup is asynchronous, the return value indicates whether the request has been accepted. Multiple successful calls will also return true.
Returns true if successful.
Session is used in subsequent calls to link mayLaunchUrl call, the CustomTabsIntent and the tab generated to each other. The callback provided here is associated with the created session. Any updates for the created session (see Custom Tabs Callback below) is also received through this callback. Returns whether a session was created successfully. Multiple calls with the same CustomTabsCallback or a null value will return false.
This CustomTabsSession method tells the browser of a likely future navigation to a URL. The method warmup() should be called first as a best practice. The most likely URL has to be specified first. Optionally, a list of other likely URLs can be provided. They are treated as less likely than the first one, and have to be sorted in decreasing priority order. These additional URLs may be ignored. All previous calls to this method will be deprioritized. Returns whether the operation completed successfully.
Will be called when a navigation event happens in the custom tab. The navigationEvent int is one of 6 values that defines the state of the page is in. See below for more information.
Custom Tabs is supported by most Android browsers. Nevertheless, since it uses an ACTION_VIEW Intent with key Extras to customize the UI it will open in the system browser, or the user's default browser if Custom Tabs is not supported.
If the user has a browser that supports Custom Tab installed and it is the default browser, it will automatically pick up the EXTRAS and present a customized UI.
Скучный бложик тестировщика
Об Android, о тестировании, мысли, рекомендации, инструкции.
Google дал возможность разработчикам использовать Chrome Custom Tabs
Этот функционал уже используют Feedly, Medium и Tumblr, для остальных его откроют в ближайшее время.
Вчера Google выпустил новую версию Chrome для Android, и с ней у разработчиков появилась возможность использовать Chrome Custom Tabs для работы со сторонним веб-контентом в своих приложениях.
Этот функционал уже используют Feedly, Medium и Tumblr, для остальных его откроют в ближайшее время.
Кроме того, разработчики могут более просто и быстро кастомизировать Chrome, так что переход из приложения на страницу будет выглядеть для пользователя незаметным.
Наконец Custom Tabs это все возможности большого Chrome. Безопасность, многопоточность, автозаполнение, хранение паролей, бесшовная работа с информацией пользователя (например, если пользователь в браузере залогинен на сайте, то он будет залогинен и в приложении).
Интегрировать новую функцию можно очень просто, а доступны Chrome Custom Tabs во всех Android с новой версией Chrome.
2 января 2016 г.
Chrome Custom Tabs
Что такое клиентские табы Chrome?
- Цвет тулбара
- Анимации входа и выхода
- Добавлять собственные действия на тулбар Chrome и дополнительное меню (примечание: речь идёт об overflow menu. Это то самое, которое вываливается при нажатии на три точки, расположенные вертикально)
Рис. 1. Демонстрация скорости загрузки страницы в клиентском табе, во внешнем Chrome и во WebView.
Вы сами можете протестировать наш пример клиентских табов: GitHub.
Когда мне стоит использовать клиентские табы Chrome вместо WebView?
Простое внедрение. Нет необходимости писать код для управления запросами, запросами разрешений, управления куками.
Осведомлённость о сёрфинге: браузер предоставляет приложению обратные вызовы о действиях, происходящих в нём.
Предзагрузка браузера в фоне за счёт ресурсов приложения
Передача подходящего URL в браузер заранее, чтобы он смог предзагрузить данные, увеличив скорость загрузки страницы при обращении к ней
Общее (с Chrome) хранилище кук, а также модель управления разрешениями. Пользователю не нужно будет авторизовываться на сайтах, если он на них уже был ранее; не нужно предпринимать разрешения, если они уже запрашивались ранее.
Если пользователь включал в Chrome сжатие данных, то здесь оно тоже будет работать.
Синхронизация Автоподстановки между разными устройствами для удобства заполнения форм.
Последняя версия браузера доступна в том числе на устройствах под Android 4.4 и ниже (в 5.0 WebView стал обновляемым), в отличие от WebView.
Когда это будет доступно?
Клиентские табы Chrome предоставляет, начиная с версии 45. Т.е. это работает уже у всех, у кого установлен минимум Jellybean. Примечание: Последняя версия для ICS, напомню, была 42. Сейчас на ICS (API lvl15) приходится 2,9% устройств.
Инструкция по внедрению
Если вы будете следовать инструкциям с этой страницы, то у вас всё получится.
Настройка UI и взаимодействие с клиентскими табами.
Ускорение загрузки страницы и защита приложения от прибивания.
Замечание. Всё это работает, начиная с Chrome 45;
Включение клиентских табов Chrome
Что случится, если у пользователя не установлено подходящих версий Chrome?
Мы используем интент ACTION_VIEW, что означает, что по умолчанию страница будет открыта в системном браузере или в браузере, выбранным пользователем основным. Если у пользователя браузером по умолчанию выбран Chrome, он автоматически отловит EXTRAS и отобразит модифицированный UI. Кроме того возможно, что сторонние браузеры смогут реагировать аналогично и тоже предоставлять модифицированный IU.
Тем не менее, как я могу проверить, поддерживает ли Chrome клиентские табы?
Настройка цвета адресной строки
Настройка действия собственной кнопки
Настраиваем меню
Настройка собственной анимации входа и выхода
Предварительная подготовка Chrome для ускорения загрузки страниц
Подключение к сервису Chrome
Если вы не очень хорошо знакомы с тем, как подключаться к сервисам в Android, то для вас есть готовый интерфейс, созданный с AIDL, который автоматически создаст класс прокси для сервиса. AIDL, который определяет сервис, можно найти в нашем примере на GitHab.
Инициализация Chrome
boolean warmup(long flags) Инициализирует процесс браузера и загружает нативные библиотеки. Инициализация происходит асинхронно и значение возвращается, как только запрос может быть принят. Возвращает True в случае успеха. Множественные успешные вызовы также будут возвращать True.
Создание новой сессии таба
boolean mayLaunchUrl(ICustomTabsCallback sessionCallback, Uri url, Bundle extras,ListotherLikelyBundles)
Сообщает браузеру URL, которые потенциально могут быть открыты в будущем. Настоятельно рекомендуем в первую очередь делать вызов метода warmup(). В первую очередь нужно сообщить наиболее вероятный URL. Дополнительно можно передать список вероятных URL. Они будут обработаны с меньшим приоритетом и их нужно отсортировать по уменьшению важности. Дополнительные URL могут быть проигнорированы. Все предыдущие вызовы этого метода будут понижены в приоритете. Возвращает успешность завершения операции.
Обратный вызов подключения в клиентских табах
Использование библиотеки поддержки с клиентской стороны
Нет. Вот этот проект позволит вам интегрировать Chrome в ваше приложение, но совсем другим путём
Best Practices
Since Custom Tabs was launched, we've seen various implementations with different levels of quality. This section describes a set of best practices we've found to create a good integration.
You can save up to 700 ms when opening a link with the Custom Tabs by connecting to the service and pre-loading the browser.
Connect to the Custom Tabs service on the onStart() method of the Activities you plan to launch a Custom Tab from. Upon connection, call warmup() .
The loading happens as a low priority process, meaning that it won't have any negative performance impact on your application, but will give a big performance boost when loading a link.
Pre-rendering will make external content open instantly. So, as if your user has at least a 50% likelihood of clicking on the link, call the mayLaunchUrl() method.
Calling mayLaunchUrl() will make Custom Tabs pre-fetch the main page with the supporting content and pre-render. This will give the maximum speed up to the page loading process, but comes with a network and battery cost.
Custom Tabs is smart and knows if the user is using the phone on a metered network or if it's a low end device and pre-rendering will have a negative effect on the overall performance of the device and won't pre-fetch or pre-render on those scenarios. So, there's no need to optimize your application for those cases.
Although Custom Tabs is available for the great majority of users, there are some scenarios where a browser that supports Custom Tabs is not installed on the device or the device does not support a browser version that has Custom Tabs enabled.
Make sure to provide a fallback that provides a good user experience by either opening the default browser or using your own WebView implementation.
It's usually very important for websites to track where their traffic is coming from. Make sure you let them know you are sending them users by setting the referrer when launching your Custom Tab:
Custom animations will make the transition from your application to the web content smoother. Make sure the finish animation is the reverse of the start animation, as it will help the user understand them returning to the content where the navigation started.
Adding an Action Button will make users engage more with your app features. But, if there isn't a good icon to represent the action your Action Button will perform, create a bitmap with a text describing the action.
Remember the maximum size for the bitmap is 24dp height x 48dp width.
Remember the user may have more than one browser installed that supports Custom Tabs. If there's more than one browser that supports Custom Tabs and none if them is the preferred browser, ask the user how they want to open the link:
Android 11 has introduced package visibility changes. If your Android app is targeting API level 30 or above, adding a queries section to AndroidManifest.xml is needed, otherwise the code snippet above won't return results:
Add an option into the application for the user to open links in the default browser instead of using a Custom Tab. This is specially important if the application opened the link using the browser before adding support for Custom Tabs.
Some URLs can be handled by native applications. If the user has the Twitter app installed and clicks on a link to a tweet. They expect that the Twitter application will handle it.
Before opening an url from your application, check if a native alternative is available and use it.
Android 11 introduces a new Intent flag, FLAG_ACTIVITY_REQUIRE_NON_BROWSER , which is the recommended way to try opening a native app, as it doesn't require the app to declare any package manager queries.
The solution is to try to launch the Intent and use FLAG_ACTIVITY_REQUIRE_NON_BROWSER to ask Android to avoid browsers when launching.
If a native app that is capable of handling this Intent is not found, an ActivityNotFoundException will be thrown.
Even though the application may target Android 11, or API level 30, previous Android versions will not understand the FLAG_ACTIVITY_REQUIRE_NON_BROWSER flag, so we need to resort to querying the Package Manager in those cases:
The approach used here is to query the Package Manager for applications that support a generic "http" intent. Those applications are likely browsers.
Then, query for applications that handle itents for the specific URL we want to launch. This will return both browsers and native applications setup to handle that URL.
Now, remove all browsers found on the first list from the second list, and we'll be left only with native apps.
If the list is empty, we know there are no native handlers and return false. Otherwise, we launch the intent for the native handler.
We need to ensure using the right method for each occasion:
Build.VERSION.SDK_INT provides the information we need. If it's equal or larger than 30, Android knows the FLAG_ACTIVITY_REQUIRE_NON_BROWSER and we can try launching a nativa app with the new approach. Otherwise, we try launching with the old approach.
If launching a native app fails, we then launch a Custom Tabs.
Customize with your application's primary color if you want the user to feel that the content is a part of your application.
If you want to make it clear for the user that they have left your application, don't customize the color at all.
Make sure you enable the Share Action to the overflow menu, as users expect to be able to share the link to the content they are seeing in most use cases:
Customize the close button to make the Custom Tab feel it is part of your application.
If you want the user to feel like Custom Tabs is a modal dialog, use the default “X” button. If you want the user to feel the Custom Tab is part of the application flow, use the back arrow.
When intercepting clicks on links generated by android:autoLink or overriding clicks on links on WebViews, make sure that your application handles the internal links and let's Custom Tabs handle the external ones.
If you need to do any processing between the user clicking on a link and opening the Custom Tab, make sure it runs in under 100ms. Otherwise users will see the unresponsiveness and may try to click multiple times on the link.
If it's not possible to avoid the delay, make sure you application is prepared for when a user clicks multiple times on the same link and does not open a Custom Tab multiple times.
Читайте также: