개요
Project를 진행하면서, FCM알림을 띄울 뿐 아니라 따라 눌렀을 때 알림별 특정 화면으로 넘어가는 조금 더 구체적인 기능이 논의되어 구현하게 되었다.
이를 구현하면서 사용한 딥링크에 대해서 이야기하고자 한다.
딥링크
특정 화면, 페이지 등으로 갈 수 있는 링크
웹의 페이지, 앱의 특정 위치를 가리키는 URI
Uri 구조 - 출처 RFC 3986
URI는 위와 같은 구조로 크게 Scheme, Authority, Path로 나뉜다
딥링크를 만들기 위해서 Scheme 부분을 임의의 값을 넣어 myApp://example꼴 같은 DeepLink Uri를 만들 수도 있다
하지만 이러한 사용자 정의 Scheme의 단점은 우연히 Scheme이 다른 앱들이랑 겹칠 경우 아래와 같은 어떤 앱을 선택할 지 화면이 나오게 된다
명확성 대화상자 - 출처 Android 공식 문서
그런 중복성 문제를 해결하고자 앱링크로 구성할 수도 있다
앱링크
안드로이드 공식 문서에 따르면 Anrdoid 12 이상부터는
http,https스킴인웹 링크,인텐트를 클릭할 경우 웹 브라우저가 실행되어 해당 링크로 이동한다 다만 웹 링크를 소유권을 확인하게 되면, 이를 해당 링크의 다루는 Handler로 앱을 지정할 수 있고, 이를 바탕으로 앱의 특정 화면으로 이동하기 위한 딥링크를 만들 수 있게 된다인증하기
도메인 주소가
https://domain.name꼴일 때https://domain.name/.well-known/assetlinks.json위치에 아래 꼴의 json 파일을 게시한다// file: "assetlinks.json" [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "앱의 패키지", "sha256_cert_fingerprints": ["sha 256 값"] } }]특히 참고해야 할 점은 아래와 같다
assetlinks.json이application/json으로 제공되어야 함assetlinks.json파일은 Scheme가HTTPS인지 여부와 상관없이HTTPS로 접근이 가능해야 함
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="https" android:host="domain.name"/> </intent-filter>인증받은 경로의
Intent가 왔을 때 앱에서 실행할 수 있도록Intent Filter를 설정한다딥링크 세팅
Compose 기준 위처럼 deeLinks 속성에 넣어서 딥링크를 설정한다실행 결과
앱 최초 진입 화면인 스터디 그룹 리스트 목록이 아니라 바로 특정 그룹 화면으로 이동하는 것을 볼 수 있다