14. DeepLink

개요

Project를 진행하면서, FCM알림을 띄울 뿐 아니라 따라 눌렀을 때 알림별 특정 화면으로 넘어가는 조금 더 구체적인 기능이 논의되어 구현하게 되었다.

이를 구현하면서 사용한 딥링크에 대해서 이야기하고자 한다.

공식 문서

딥링크

특정 화면, 페이지 등으로 갈 수 있는 링크
웹의 페이지, 앱의 특정 위치를 가리키는 URI

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.jsonapplication/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 속성에 넣어서 딥링크를 설정한다

    • 실행 결과

      앱 최초 진입 화면인 스터디 그룹 리스트 목록이 아니라 바로 특정 그룹 화면으로 이동하는 것을 볼 수 있다


© 2025. Na2te All rights reserved.