Trzecia część tego przewodnika dotyczy przyspieszenia uruchamiania przeglądarki za pomocą warmup()
i pobierania stron internetowych z wyprzedzeniem za pomocą metody mayLaunchUrl
(). Rozgrzewanie procesu przeglądarki może zaoszczędzić nawet 700 ms podczas otwierania linku. Wstępne renderowanie treści przy użyciu mayLaunchUrl
sprawia, że treści zewnętrzne natychmiast się wyświetlają. Zdecydowanie zalecamy stosowanie tych interfejsów API, które mogą znacznie poprawić wygodę użytkowników korzystających z integracji kart niestandardowych.
Wymagane kroki:
- Sprawdź, używając
CustomTabsClient.getPackageName(...)
, 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ą narzędzia
CustomTabsClient.warmup()
. b. Utwórz nowy elementCustomTabsSession
w:CustomTabsClient.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));
}
});
}
Otwieranie stron w aplikacjach natywnych
Na urządzeniach z Androidem adresy URL mogą być obsługiwane przez aplikacje natywne. 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 natywnych, jeśli są one 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.