Android Jetpack Slices
Slices는 앱 외부에 앱 콘텐츠를 표시할 수 있는 유연한 UI 템플릿입니다.
즉, 사용자가 내 앱을 직접 실행하지 않아도 내 앱에서 제공하는 콘텐츠를 이용하는 것이 가능해집니다.
앱 외부 : SliceView를 구현한 앱 (ex. Google Search, Google Assistant) or OS
앱 콘텐츠 : Anything
유연한 UI 템플릿 : Rich, Dynamic, Interactive 한 Slice UI 템플릿
https://developer.android.com/guide/slices/?hl=ko
2019.01월 기준으로 Slices 기능은 정식 오픈하지 않은 상태. (정식 오픈 일정도 아직 없음)
SlicePresenter : SliceView를 구현한 앱 (ex. Google Search, Google Assistant) or OS
SliceProvider : Content providers를 상속한(extends) 추상 클래스로, onBindSlice() 메서드에서 URI를 기반으로 Slice를 생성하여 제공
Android Studio 3.2 or later. (필수는 아니지만 Slices 관련 Tool 들을 포함하고 있음.)
Android 4.4 (API level 19) or later.
Slice Viewer : 2018.12월 기준으로 Slices 가 정식 오픈하지 않았기 때문에 테스트를 위해서 직접 SliceView를 구현하거나, Google에서 제공하는 sample app 이 필요함.
https://developer.android.com/guide/slices/getting-started?hl=ko#run-the-slice-viewer
build.gradle
dependencies {
//...
implementation "androidx.slice:slice-builders:1.0.0"
//...
}
AndroidManifest.xml
WizSliceProvider.java
SliceProvider를 상속한 WizSliceProvider 클래스를 생성합니다.
#onCreateSliceProvider 메서드를 통해, 초기화 후 true를 리턴합니다.
SliceView를 통해 미리 정의된 ("content://com.sh.test") Uri를 #onBindSlice 메서드를 통해 받을 수 있습니다.
path를 기반으로 파싱 후, Slice를 생성하고 반환합니다.
대부분의 콘텐츠들이 서버와 같은 다른 저장소에서 비동기로 가져오게 되어 있습니다.
이런 비동기 데이터들을 보여주고 업데이트하기 위해서 아래와 같이 구현할 수 있습니다.
콘텐츠를 보여주는 메서드(ex. #setSubtitle)에서 "boolean isLoading" 값을 "false"로 선언
비동기 처리 후, ContentResolver#notifyData(Uri) 메서드를 통해 SliceProvider#onBindSlice 메서드 재호출
여러 타입의 row 들을 추가할 수 있는 ListBuilder를 기반으로 Slice를 생성할 수 있다.
자세한 내용은 아래 링크를 참고하시기 바랍니다.
https://developer.android.com/guide/slices/templates?hl=ko
현재(2019.01) Slices를 이용하는 앱은 없지만, 아래 영상들을 보고 정리했습니다.
어떤 콘텐츠를 표시하든 기술적인 제한은 없지만, 구글에서는 너무 디테일하고 많은 콘텐츠를 표시하기보다는, 라이트하고 유저에게 맞춤화된 콘텐츠를 표시하기 권장하고 있습니다.
Android Slices: build interactive results for Google Search (Google I/O '18)
Android Slices Best Practices (Android Dev Summit '18)
작년 구글 I/O 때 소개된 내용인데, 아직 정식 출시를 하고 있지는 않습니다.
직접 서비스에서 이용해 보지 않았기 때문에 정확히는 모르겠지만, 개인적인 느낌으로 다른 앱에서 이용할 수 있는 홈 화면의 Widget 같은 느낌이네요.
아직은 테스트하기도 쉽지 않기에, 추후에 대응해도 될 거 같습니다.