Trzecia część tego przewodnika dotyczy usługi kart niestandardowych i wyjaśnia, dlaczego korzystanie z niej w aplikacji poprawia wygodę użytkowników:
- Natychmiastowe otwieranie treści zewnętrznych: korzystanie z
warmup()
powoduje rozpoczęcie procesu przeglądarki w tle, jeszcze zanim użytkownik kliknie link. Może to zaoszczędzić nawet 700 ms podczas otwierania linku.mayLaunchUrl()
pobiera strony z wyprzedzeniem. Połączenie obu interfejsów API umożliwia natychmiastowe wczytywanie stron, co znacznie zwiększa wygodę użytkowników korzystających z integracji kart niestandardowych. - Lepsza obsługa zminimalizowanych kart niestandardowych: dzięki połączeniu z usługą Karty niestandardowe i użyciu tego samego
CustomTabSession
podczas uruchamiania karty niestandardowej Chrome będzie w stanie usunąć wcześniej zminimalizowane karty niestandardowe przed uruchomieniem nowej karty. W ten sposób zadbasz o wygodę użytkowników.
Wymagane kroki:
- Za pomocą
CustomTabsClient.getPackageName(...)
sprawdź, czy domyślna przeglądarka obsługuje karty niestandardowe. Jeśli tak, powiąż usługę CustomTabsService za pomocąCustomTabsClient.bindCustomTabsService()
. Po nawiązaniu połączenia z usługą CustomTabsService w wywołaniu zwrotnym
CustomTabsServiceConnection.onCustomTabsServiceConnected()
wykonaj te czynności:a. Rozgrzej proces przeglądarki za pomocą funkcji
CustomTabsClient.warmup()
. b. Utwórz nowy elementCustomTabsSession
przy użyciuCustomTabsClient.newSession()
.Opcjonalnie pobierz z wyprzedzeniem strony internetowe, które użytkownik prawdopodobnie odwiedzi za pomocą
CustomTabsSession.mayLaunchUrl()
.Gdy uruchamiasz nową kartę niestandardową, przekaż
CustomTabsSession
do klasy CustomTabsIntent.Builder za pomocą konstruktoranew CustomTabsIntent.Builder(session)
.
Jeśli Twoja aplikacja jest kierowana na poziom interfejsu API Androida 30, CustomTabsClient.getPackageName(...)
wymaga dodania sekcji zapytań do pliku manifestu Androida i zadeklarowania filtra intencji, który pasuje do przeglądarek obsługujących karty niestandardowe.
<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>
Oto pełny przykład połączenia z usługą kart niestandardowych:
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));
}
});
}
Otwieraj linki w aplikacjach na Androida
W systemie Android adresy URL mogą być obsługiwane przez aplikacje na Androida. Jeśli na przykład użytkownik ma zainstalowaną aplikację Facebook i klika link do posta na Facebooku, zazwyczaj woli, aby link otwierał się w aplikacji Facebook, a nie w przeglądarce.
Domyślnie karty niestandardowe otwierają linki w odpowiednich aplikacjach na Androida (jeśli są zainstalowane). Jednak po ustawieniu parametru CustomTabsServiceConnection
to zachowanie przestaje działać, a wszystkie adresy URL otwierają się na kartach niestandardowych. Aby zadbać o wygodę użytkowników, zalecamy ponowne włączenie tego działania przy użyciu tego kodu:
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setSendToExternalDefaultHandlerEnabled(true)
.build();
Następny artykuł: dowiedz się, jak zmieniać rozmiar kart niestandardowych.