이 가이드의 세 번째 부분에서는 맞춤 탭 서비스와 애플리케이션에서 이 서비스를 사용하면 더 나은 사용자 환경을 제공할 수 있는 이유에 중점을 둡니다.
- 외부 콘텐츠 즉시 열기:
warmup()
를 사용하면 사용자가 링크를 클릭하기 전에도 백그라운드에서 브라우저 프로세스가 시작되며 링크를 열 때 최대 700밀리초를 절약할 수 있습니다.mayLaunchUrl()
페이지를 미리 가져옵니다. 두 API를 함께 사용하면 페이지가 즉시 로드되어 맞춤 탭 통합의 사용자 환경이 크게 개선됩니다. - 최소화된 맞춤 탭을 더 효과적으로 처리: 맞춤 탭 서비스에 연결하고 맞춤 탭을 실행할 때 동일한
CustomTabSession
를 사용하면 Chrome에서 새 탭을 실행하기 전에 이전에 최소화된 맞춤 탭을 삭제할 수 있으므로 더 일관된 사용자 환경을 제공할 수 있습니다.
필요한 단계는 다음과 같습니다.
CustomTabsClient.getPackageName(...)
를 사용하여 기본 브라우저가 맞춤 탭을 지원하는지 확인합니다. '예'인 경우CustomTabsClient.bindCustomTabsService()
를 사용하여 CustomTabsService에 바인딩합니다.CustomTabsService에 연결되면
CustomTabsServiceConnection.onCustomTabsServiceConnected()
콜백에서 다음을 실행합니다.a.
CustomTabsClient.warmup()
를 사용하여 브라우저 프로세스를 예열합니다. b.CustomTabsClient.newSession()
를 사용하여 새CustomTabsSession
를 만듭니다.원하는 경우
CustomTabsSession.mayLaunchUrl()
를 사용하여 사용자가 방문할 가능성이 높은 웹페이지를 미리 로드합니다.새 맞춤 탭을 실행할 때 생성자
new CustomTabsIntent.Builder(session)
를 사용하여CustomTabsSession
를 CustomTabsIntent.Builder에 전달합니다.
앱이 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에서는 Android 애플리케이션에서 URL을 처리할 수 있습니다. 예를 들어 사용자가 Facebook 앱을 설치하고 Facebook 게시물 링크를 클릭하는 경우 일반적으로 브라우저가 아닌 Facebook 앱에서 링크가 열리는 것을 선호합니다.
기본적으로 맞춤 탭은 설치된 경우 각 Android 애플리케이션에서 링크를 엽니다. 그러나 CustomTabsServiceConnection
가 설정되면 이 동작이 작동하지 않고 모든 URL이 대신 맞춤 탭에서 열립니다. 사용자 환경을 개선하려면 다음 코드를 사용하여 이 동작을 다시 사용 설정하는 것이 좋습니다.
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setSendToExternalDefaultHandlerEnabled(true)
.build();
다음 단계: 맞춤 탭 환경의 크기를 조절하는 방법 알아보기