본문 바로가기

안드로이드

안드로이드 url scheme

딥링크

홈페이지가 아닌 홈페이지 내에 특정 화면에 한 번에 도달할 수 있는 링크

연결되거나 검색되어 들어간 사이트의 최상위 페이지 즉, 홈페이지를 제외한 나머지 모든 웹 페이지로 가는 하이퍼링크(hyperlink). 딥(deep)은 한 사이트에 있는 웹 페이지의 계층 구조 내에 있는 페이지의 깊이를 가리키는 말로 계층 구조 내의 최상위 페이지, 즉 홈페이지 아래에 있는 페이지라면 어떠한 것이라도 딥이라고 간주됩니다. [1]

 

딥링크의 3가지 방식

  • URI 스킴 방식 : 앱에 URI 스킴(scheme) 값을 등록하여 딥링크 사용
  • 앱링크(App Link) : Android 제공 - 도메인 주소를 이용한 딥링크 사용
  • 유니버셜 링크 (Universal Link) : iOS 제공  - 도메인 주소를 이용한 딥링크 사용

URL 스킴의 한계

  1. 앱이 설치되지 않은 경우
  2. 두 개 이상의 앱이 myapp://에 응답하려 하는 경우 (여러 개의 앱이 같은 Scheme 사용가능)

2개의 앱이 중복된 Scheme을 가질 경우, 둘 중 하나의 딥링크는 하이재킹되어 유실될 수 있습니다. path 등까지 모두 동일한 주소를 사용한다면, Android의 경우 딥링크로 오픈할 앱 선택창이 노출되고, iOS는 가장 마지막에 설치한 앱이 자동으로 열립니다.

 

대안

App Link와 Universal Link는 고유한 웹사이트 주소(도메인)로 만들어지기 때문에 항상 유일합니다.
이 도메인이 이 앱의 소유자라는 것을 인증해줘야 제대로 동작합니다.

 

 

딥링크 사용 예제

네이버 지도앱 연동

nmap://search?query=%EA%B0%95%EB%82%A8%EC%97%AD&appname=com.example.myapp

 

앱 콘텐츠 딥 링크 만들기

AndroidManifest.xml

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    <activity
        android:name="com.example.android.GizmosActivity"
        android:label="@string/title_gizmos" >
        <intent-filter android:label="@string/filter_view_http_gizmos">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            
            <data android:scheme="http"
                  android:host="www.example.com"
                  android:pathPrefix="/gizmos" />
            <!-- note that the leading "/" is required for pathPrefix-->
        </intent-filter>
        <intent-filter android:label="@string/filter_view_example_gizmos">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- Accepts URIs that begin with "example://gizmos” -->
            <data android:scheme="example"
                  android:host="gizmos" />
        </intent-filter>
    </activity>
cs

 

  • Scheme 값: 앱 개발자가 정한 값으로 앱을 구분
  • Path: 앱 내 특정 페이지를 지정

data 태그에서 Scheme가 exmaple이고 host가 gizmos 이므로 주소는 example://gizmos 가 됩니다.

 

 

참조:

[1]  한국정보통신협회 - 정보통신용어사전

https://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=040687-1 

 

[2] Android 딥 링크 - URL Scheme

https://jaeryo2357.tistory.com/84

 

[3] 지도앱 연동 URL Scheme

https://guide.ncloud-docs.com/docs/naveropenapiv3-maps-url-scheme-url-scheme

 

[4] 앱 콘텐츠 딥 링크 만들기

https://developer.android.com/training/app-links/deep-linking?hl=ko 

 

[5] 딥링크의 모든것(feat. App Link, Universal Link, Deferred DeepLink)

https://medium.com/prnd/%EB%94%A5%EB%A7%81%ED%81%AC%EC%9D%98-%EB%AA%A8%EB%93%A0%EA%B2%83-feat-app-link-universal-link-deferred-deeplink-61d6cf63a0a5

 

[6] 딥링크101 마케터와 개발자를 위한 딥링크 시작하기

https://www.airbridge.io/blog-ko/deeplink-101-for-marketers-and-developers