URI Scheme 방식은 Android와 Ios에서 모두 사용 가능한 딥 링크 수단이다.
딥링크란?
딥 링크는 홈페이지가 아닌 홈페이지 내에 특정 화면에 한 번에 도달할 수 있는 링크이다. 예를 들면,
- 네이버 웹툰의 BaseUrL : https://comic.naver.com/webtoon/weekday
- 네이버 월요 웹툰 URL : https://comic.naver.com/webtoon/weekdayList?week=mon
네이버 웹툰
매일매일 새로운 재미, 네이버 웹툰.
comic.naver.com
네이버 웹툰
매일매일 새로운 재미, 네이버 웹툰.
comic.naver.com
위의 BaseUrL이 네이버 웹툰의 일반 링크라면, 아래의 월요웹툰에 해당하는 URl이 딥링크라고 볼 수 있다.
오늘 정리해 볼 URI Scheme 방식이 딥링크 방식 중 일반적으로 많이 사용되는 방식이다.
URI Scheme을 이용한 딥링크는 앱에 Scheme값을 등록하는 형태로 앱을 구분한다.
Scheme은 앱마다 등록할 수 있는 값으로 미리 정해둔 스킴값을 호출하면 앱을 오픈하는 방식이다.
예를 들어 카카오앱을 실행한다면 kakao://라는 정해진 스킴값을 활용한다.
위 스킴값은 앱 개발 시 효율적인 앱 오픈을 위해 자체적으로 해당 회사에서 값을 등록해 두는 것이다.
위의 스킴에서 path를 활용하여 페이지를 나타낸다. 예를 들면, kakao://login 등과 같은 방식이다. 위 URL은 실제 카카오톡의 URL이 아니라 예시일 뿐이니, 실제 URL을 보고 싶다면 각 회사의 developer 사이트를 참고하자.
또한, 위 형태는 Scheme://path 형식이다. 안드로이드의 경우 manifest에 스킴 값을 등록하여 사용한다.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="example"
android:scheme="gizmos" />
</intent-filter>
위의 소스를 간단하게 설명하면
<action> : Google 검색에서 인텐트 필터에 도달할 수 있도록 ACTION_VIEW 인텐트 작업을 지정한다. ACTION_VIEW는 사용자에게 데이터를 표시하고, 데이터에 대해 수행되는 가장 일반적인 작업이다.
<data> : URI 형식을 나타내고, Scheme, path 등 스킴에 속성을 추가하여 URI 유형을 세분화할 수 있다.
<category>
- BROWSABLE은 웹브라우저에서 인텐트 필터에 액세스 할 수 있으려면 필요하다. 위 카테고리가 없을 경우 브라우저에서 링크를 클릭해도 앱으로 연결할 수 없다.
- DEFAULT를 포함하게 되면 앱이 암시적 인텐트에 응답할 수 있다. 이 카테고리가 없다면 앱 구성요소 이름을 지정한 경우에만 액티비티를 시작할 수 있다.
위 코드에서 data값을 지정해 주었기 때문에, "example://gizmos"와 "http://www.example.com/gizmos" URI 모두 위 Activity로 확인된다.
위의 인텐트에서 제공하는 데이터를 사용하려면 getData(), getAction() 메서드를 호출하여 Intent와 연결된 작업을 가져온다.
일반적으로 onCreate()나 onStart와 같은 초기 콜백에서 호출한다.
마치며
오늘 정리해 본 내용은 하이브리드앱에서 많이 사용되는 WebView Scheme에 관한 내용이다. 실제로 하이브리드앱을 개발하면서, 앱 내의 WebView에서만 페이지를 이동하는 경우도 있었지만,
앱 외부로 브라우저를 띄운 뒤 외부 브라우저에서 다시 앱으로 돌아오거나 하는 등 다양한 상황들이 존재했다.
하이브리드앱을 개발할 때 Scheme이나, WebViewSetting 또는 ChromeSetting 등 다양한 개념들을 숙지하여 필요한 상황에 적절하게 사용하자!
참고
앱 콘텐츠 딥 링크 만들기 | Android 개발자 | Android Developers
사용자가 링크에서 앱에 진입할 수 있도록 하려면 관련 활동의 인텐트 필터를 앱 manifest에 추가해야 합니다. 이러한 인텐트 필터는 모든 활동의 콘텐츠로 연결되는 딥 링크를 허용…
developer.android.com