문제
최근 회사에서 프로젝트를 진행하던 중 문의가 하나 들어왔다.
"기존에 웹 브라우저에서 앱으로 연결하던 기능에서 앱 선택 화면이 노출되지 않고 바로 앱으로 연결시키도록 변경할 수 있는지"
위 문의에 대한 답변을 주기 위해 찾던 중 원인은 웹 브라우저에서 앱으로 연결할 때 기존에 사용했던 방식이 스키마 방식이었다는 점이었다.
스킴 방식으로 앱으로 연결할 때 앱 선택기가 나오는 이유는 여러 가지 앱이 같은 스킴을 사용할 수 있기 때문이다.
예를 들면, "openapp://" 라는 스킴을 사용했다면, 같은 스킴을 다른 앱에서 사용한다면 앱 선택기로 둘 중 어떤 앱으로 실행시키는지 묻는 앱 선택기가 노출된다.
스킴 방식이 설정이 간단하지만, 위와 같은 한계가 있기 때문에 앱 링크 방식으로 변경하기로 결정했다.
쿠팡이 앱 링크를 사용하는지는 정확히는 모르지만, 쿠팡 앱처럼 부드럽게 넘어가는 것을 목표로 했다.
스킴 방식과 앱 링크 비교
스킴 방식 | 앱 링크 | |
URL 형식 | http, https, custom scheme | http, https |
intent action | 모든 액션 가능 | android.intent.action.VIEW |
intent category | 모든 카테고리 가능 | android.intent.category.BROWSABLE android.intent.category.DEFAULT 위 2가지 필수 |
링크 인증 | 없음 | Digital Asset Link 파일 필요 (json) |
한계 | 스킴이 같은 경우 앱 선택기가 노출됨 | 안드로이드 6.0 이상에서만 동작 |
앱 링크 적용 방법
Android 앱에서 앱 링크를 적용하려면 웹 사이트와 앱 간의 상호 연결을 설정해야 한다.
1. Digital Asset Links 파일 생성
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "your.package.name",
"sha256_cert_fingerprints": ["your_app_certificate_fingerprint"]
}
}
]
디지털 에셋 링크 파일은 위와 같은 json 형식을 가진다.
보통 relation과 namespace는 위의 값 고정
package_name : 앱의 패키지 명 입력
sha256_cert_fingerprints : 앱의 sha256 키 입력
sha 256 키를 확인하는 방법은 여러 가지가 있지만, android studio 내의 우측 상단에 gradle에서 singleReport를 통해 확인 가능하다.
위와 같은 형식으로 json 파일을 생성한 뒤 웹 사이트의 루트 디렉터리에 '.well-known' 폴더를 생성하고 저장한다.
".well-known" 폴더란?
웹 클라이언트나 다른 웹 서비스가 해당 폴더에 접근하여 필요한 정보를 찾을 수 있도록 폴더 내에 위치한 파일들은 웹 사이트의 특정 기능이나 서비스에 관련된 정보를 담고 있으며, 웹 클라이언트나 다른 시스템이 이 정보를 활용한다.
즉, .well-known 폴더는 웹 사이트의 중요한 메타 정보를 저장하고 다른 시스템과의 상호 작용을 용이하게 하기 위해 사용되는 폴더이다.
2. 앱 설정
앱의 manifest 파일에 Intent-filter를 추가하여 앱이 처리할 앱 링크의 스킴과 호스트를 정의한다.
<intent-filter android:autoVerify="true">
<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="yourwebsite.com" />
<data
android:scheme="https"
android:host="yourwebsite.com" />
</intent-filter>
위 인텐트 필터는 웹 사이트에서 실제 연동할 Activity에 작성해 주면 되고, 앱 링크를 사용할 때는 android:autoVerify="true"를 작성해줘야 한다. 이는 앱을 자동으로 인증하도록 지시하는 역할을 한다.
위와 같이 설정하면 사용자가 웹 콘텐츠를 클릭하면 해당 링크가 자동으로 앱으로 열리게 된다.
기존 스킴이 겹쳐 앱 선택기가 나오는 현상이 없고, 사용자를 우리 앱으로 유입시킬 수 있는 역할을 한다.
마지막으로, 주의할 점은 안드로이드 6.0 이상만 앱링크를 지원하므로, 꼭 프로젝트의 최소 지원버전을 체크하고 사용하자🙃
마치며
사실 딥링크에 대한 내용은 이전에 한번 포스팅했던 적이 있다. 하지만, 이번 조사를 통해 더 자세하게 알아볼 수 있는 기회가 되었던 것 같고 위에 언급했던 스킴 방식과 앱 링크 방식 외에도 파이어 베이스의 다이나믹 링크, 디퍼드 딥링크 등 몇 가지 더 존재하는 것 같다.
파이어 베이스의 딥링크는 2025년? 정도에 지원 종료한다는 내용이 있어서 제외했고, 디퍼드 딥링크는 앱 설치 후 해당 페이지로 바로 이동할 수 있게 해 준다는 장점이 있지만 나중에 실제로 사용하게 되면 다시 정리해보려고 한다.
안드로이드 개발자여서 웹이나 도메인에 대한 지식이 부족하지만 이해한 내용을 바탕으로 정리를 해보았다.
틀린 부분이 있거나 수정이 필요한 부분이 있으면 댓글 부탁드립니다😭
모두 즐코☺️
참고
앱 콘텐츠 딥 링크 만들기 | Android 개발자 | Android Developers
사용자가 링크에서 앱에 진입할 수 있도록 하려면 관련 활동의 인텐트 필터를 앱 manifest에 추가해야 합니다. 이러한 인텐트 필터는 모든 활동의 콘텐츠로 연결되는 딥 링크를 허용…
developer.android.com