딥링크에는 URI 3가지 유형이 있다.


커스텀 스킴이라고도 부르는 URL 스킴 방식은 앱에 스킴(scheme) 값을 등록하여 딥링크를 사용하는 방법이다. 사진에 있는 App scheme을 커스텀해서 나만의 값을 등록하여 활용할 수 있다.
ex) angela://dev.velog.com
디바이스에 설치된 앱 중 내가 정한 스킴과 동일한 앱을 오픈하게 된다.

커스텀 스킴과 달리 표준 웹링크 형태이다. 그냥 웹 주소처럼 https://angela-jung.com 이런 식으로 구성되어 있다.
앱 설치 유저는 앱으로, 앱 미설치 유저는 웹 링크가 오픈되며 웹 페이지를 활용해 각 플랫폼에 맞는 스토어로 유도가 가능하다.
단점에 있는 저 마지막 문장 때문에 열심히 테스트를 해보았다. 테스트 결과 meta의 경우 에러메시지가 뜨긴 하지만 딥링크가 실행되지 않는 경우는 브라우저에 직접 url을 입력하여 검색하는 것 외에는 없었다.

내가 설치하지 않은 앱의 링크를 눌렀을 때 스토어로 이동하고, 스토어에서 다운로드를 받고 나면 곧 바로 메인에 떨어지는 경험이 다들 한 번씩 있을 것이다.
요즘에는 스토어로 이동하여 앱을 다운로드 받아도 내가 최초에 클릭했던 링크의 페이지로 리다이렉트 시켜주는 앱이 대부분인데, 이 방법이 바로 디퍼드 딥링크를 사용한 것이다.
말그대로 지연된 링크라는 뜻으로 마켓에 랜딩되어 앱 설치 후 실행한 유저가 앱 첫 화면이 아닌, 지정된 특정 앱 페이지로 이동되는 기능이다.
단, 디퍼드 딥링크 적용을 위해서는 유료 sdk를 써야 한다.
appsflyer sdk의 경우 무료 버전도 기능이 많기도 하고, 유저 사용성과 마케팅을 고려했을 때 디퍼드 딥링크가 답이라고 생각해서 적용을 해보았는데...
막상 적용해서 테스트를 해보니 딥링크를 동적으로 구성하려면 유료 버전을 써야 했다 ㅠㅠ
나의 힘들었던 appsflyer sdk 적용 오류 기록은 여기에..!
결론적으로, 앱 머실치 유저에 대한 처리를 위해 Universal Link (iOS) / App Links (AOS) 를 플러터에 적용해보았다.
플러터에 app-links라는 딥링킹 라이브러리가 있으나 go router만 있으면 아주 깔끔하게 적용이 가능하다. 라이브러리 사용 필요 없음!!
본격적으로 진행하기 전에 어떠한 원리로 Universal Link와 App Links가 작동하는지 파악해야 나처럼 오래 삽질하지 않을 수 있다..
이 링크는 정확히 "앱 미설치 유저는 웹으로, 앱 설치 유저는 앱으로 보내는 원리"다.
카카오페이지를 예시로 살펴보자
아래 화면은 카카오페이지에서 공유하기를 눌렀을 때 생성되는 링크다. https:// 로 시작하는 웹 형태의 링크라는 것을 알 수 있다.

이 링크를 눌렀을 때 앱 미설치, 설치에 따라 플로우는 달라진다.
1) 앱 미설치 상태
"앱으로 보기" 선택 → 앱 스토어로 이동

2) 앱 설치 상태
splash → 홈을 잠시 거치고 → 랜딩 페이지 도달

앱 미설치 상태를 살펴보면 곧 바로 스토어로 이동하는 것이 아닌 먼저 웹 페이지가 뜨는 것을 확인할 수 있습니다. "앱으로 보기" 버튼을 누르면 앱 스토어로 리다이렉트 되며, "웹으로 볼게요"를 누르면 웹 페이지를 이용할 수 있다.
반면 앱을 설치한 상태에서는 곧 바로 유저를 앱으로 보낸다. (홈 화면이 1~2초 정도 떠있다가 곧바로 유저에게 보여주고 싶은 뷰가 뜹니다.)
여기서 앱 설치 여부에 관계 없이 가장 최초에 뜨는 화면은 리다이렉트 페이지인데 마찬가지로 웹뷰다. 웹뷰에 해당하는 부분은 웹 개발팀에 요청하여 개발이 가능하며 우리는 디바이스에 앱 설치 여부에 따른 분기처리만 시켜주면 된다.
요약하면, 사용자가 링크를 클릭했을 때, 설치된 앱이 해당 링크를 처리할 수 있는지 확인하고, 설치된 앱이 있다면 앱을 열고, 설치되지 않았다면 웹 페이지로 리다이렉트하는 방식이다.