Post

Chrome Custom Tabs

launching the browser is a heavy context switch that isn’t customizable, whileWebViews don’t share state with the browser and add maintenance overhead. 이런 단점들을 해결하기 위해 나온게Chrome Custom Tab 이다.

웹뷰와 CCT 중 뭘 써야할지 감이 잘 안올 때는,

https://stackoverflow.com/questions/42689996/webview-vs-chrome-custom-tab

간단하게 쓸 때.

launchUrl만 호출해도 된다.

1
2
3
4
val builder = CustomTabsIntent.Builder()
val customTabsIntent = builder.build()
customTabsIntent.launchUrl(context, uri)

속도를 좀 더 빠르게 하고 싶다? warm up을 하기 위해 bind를 사용하자.

https://developer.chrome.com/multidevice/android/customtabs#warm-up%20chrome%20to%20make%20pages%20load%20faster

CCT가 종료되면 이전 Activity의 onResume으로 들어온다. 그래서 따로 콜백은 안써도 됨.

주의 사항
1
2
Activity com.tistory.umbum.github\_issue\_widget\_app.LoginActivity has leaked ServiceConnection com.tistory.umbum.github\_issue\_widget\_app.helper.CustomTabsHelperKt$openCustomTab$connection$1@ef19e01 that was originally bound here

이런 에러가 뜨는건,

1
2
CustomTabsClient.bindCustomTabsService(context, CUSTOM\_TAB\_PACKAGE\_NAME, connection)

이렇게 bind해놓은 상태에서 다시 bind를 해버리면 발생한다. onDestroy에서 unbind해주어야 함. 그래서 mClient, mConnection 둘 다 멤버 변수로 저장해 두어야 한다.

1
2
activity.unbindService(mConnection)

참고 자료

https://developer.chrome.com/multidevice/android/customtabs : best practices, 왜 bind를 해야 하는지 등

This post is licensed under CC BY 4.0 by the author.