Android App Shortcut 만들기
원티드 안드로이드앱 에서는 AppShortcuts 기능을 제공합니다. 사용자가 서비스를 사용하면서 확인한 포지션 목록을 최신 순으로 보여주는 기능입니다. App Shortcut 기능을 개발하면서 겪은 내용을 정리해보려고 합니다.
Static Shortcut
처음에 Shortcut 개발을 시작했을 때는 앱에서 사용할 수 있는 탭 메뉴들 (검색, 추천, 지원현황, 프로필)을 개발하였습니다. 먼저 Static Shortcut 은 res/xml 폴더 아래에 파일을 생성해 줍니다.
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="shortcutId"
android:shortcutShortLabel="@string/action_send"
>
<intent android:action="action.intent.action.VIEW"
android:data="uri"
android:targetPackage="packageName"
android:targetClass="targetClassName" />
<categories android:name="android.shortcut.conversation" />
</shortcut>
</shortcuts>
shortcut 의 shortcutId 와 shortcutShortLabel 은 필수 값입니다. 추가적으로 사용한 몇 가지 속성들을 정리해보면 아래와 같습니다.
속성 | 내용 |
---|---|
android:shortcutId | 숏컷의 ID입니다. String 타입으로 지정이 가능합니다. |
android:enabled | 숏컷의 활성화 여부를 지정합니다. 만약 false 일 경우에는 shortcutDisabledMessage 를 표시하게 됩니다. |
android:icon | 숏컷이 표시될 때 아이콘이 함께 표시가 필요할 경우 지정할 수 있습니다. |
android:shortcutShortLabel | 숏컷으로 표시되는 텍스트를 지정할 수 있습니다. |
android:shortcutLongLabel | 숏컷으로 표시될 영역이 크다면 (런처기 공간을 충분히 지원해준다던가) 해당 텍스트로 표시가 됩니다. |
android:shortcutDisabledMessage | 만약 숏컷이 활성화 되지 않았다면, 해당 내용을 표시합니다. |
Shortcut 태그의 좀 더 자세한 내용은 개발자 문서를 참조하세요. Shortcut 으로 실행될 Intent 사용 방법은 마찬가지로 개발자 문서를 참조하세요.
Dynamic Shortcut
ShortcutManager의 addDynamicShortcuts
함수를 이용하면 Dynamic Shortcut을 추가할 수 있습니다. 추가할 때는 ShortcutInfo 객체를 이용하면 됩니다.
Dynamic Shortcut 개발하면서 가장 불편했던 점은 표시할 수 있는 Shortcut의 갯수 제한입니다. Shortcut 을 추가할 때 최대 개수를 넘어가게 되면 아래와 같은 Exception 확인이 가능합니다.
java.lang.IllegalArgumentException: Max number of dynamic shortcuts exceeded
Shortcut 이 추가되기 전에 Shortcut 이 최대 개수가 넘어갈 수 있는지 여부를 체크하고, 만약 초과될 것이 예상된다면 removeDynamicShortcuts
를 이용하여 최대 개수가 넘어가지 않도록 처리한 이 후에 addDynamicShortcuts
를 사용해야 합니다.
Shortcut 표시를 위한 최대 개수 값은 getMaxShortcutCountPerActivity 을 이용하면 됩니다
유의사항
만약 Dynamic Shortcut 과 Static Shortcut 을 혼용해서 개발을 할 경우 조금 어려워 집니다.(개인적으로 추천하고 싶지 않습니다.) ShortcutManager 는 static shortcut 과 dynamic shortcut을 구분하여 관리하고 있습니다.
또 한가지는 Shortcut list를 업데이트 할 때입니다. Shortcut목록을 최신순, 알파벳순 등으로 관리가 필요하다면 ShortcutInfo의 rank 필드값을 잘 설정해주면 됩니다.
마치며
원티드는 사용자가 서비스를 실행할 수 있는 다양한 경로 - 웹에서 앱을 deep link 형태로 실행한다던가, 위젯으로부터 진입한다던가, 알림으로 진입하는 등 - 를 제공하고자 고민하고 있습니다.
앞으로도 안드로이드 플랫폼에서 우리 서비스에 접근할 수 있는 다양한 방법을 시도할 것이며, Shortcut 기능이 다양한 런처들에서 지원하는 것을 기대해 보겠습니다. 그리고 안드로이드 8.0 (API 26) 부터는 Pinned Shortcuts 형태도 추가되었습니다. 해당 내용도 조만간 적용하여 소개할 수 있었으면 좋겠습니다.