Deep Link
Deep Link 란, https://medium.com/hoontopia/structures-vs-classes-for-swift-84b650db2997 와 같이 특정 콘텐츠로 안내하는 링크 다. 단순히 홈페이지로 연결하고, 특정 콘텐츠로 안내하지 않는 링크 (예, https://medium.com) 는 Deep Link 가 아니다. 이를 모바일에 적용하여, 앱 내부의 콘텐츠로 안내하는 링크를 Mobile Deep Link (이하 편의상 Deep Link) 라고 부른다.
그렇다. Custom URL Scheme 및 Universal Link 는 iOS 내에서 Deep Link 구현을 가능케하는 방법들이다.
Deep Link 가 없었다면, App Store 에서 해당 앱을 찾고, 앱을 열고, 검색하여 원하는 컨텐츠를 찾아야 하는 번거로운 단계를 거쳐야 했을 것이다.
Custom URL Scheme
iOS 9 미만에서는 Custom URL Scheme 만을 사용하여 Deep Link 를 구현 할 수 있다. 예를 들면, 이메일에서 Custom URL 을 누르면 특정 컨텍스트에서 앱을 시작 할 수 있다. 또한, 다른 앱이 특정 컨텍스트 데이터로 내 앱을 실행하도록 할 수도 있다.
다음과 같이 앱이 Custom URL Scheme 을 지원하도록 할 수 있다.
- 앱 URL 의 포맷 지정 (myphotoapp:albumname?index=1 와 같이, URL은 2번에서 등록할 Custom Scheme 으로 시작해야한다.)
- 다음과 같이 시스템이 적절한 URL 을 앱으로 보낼 수 있도록, Xcode 프로젝트 설정 내 정보 탭에서 Scheme 등록 (예, myphotoapp)
앱으로 전달되는 URL 들은 application(_:open:options:) 메서드에서 핸들링 할 수 있다.
여기서 궁금한점은, Custom URL Scheme 으로도 Deep Link 구현이 충분히 가능한데, 왜 Apple 은 Universal Link 를 만들었을까?
Custom URL Scheme 의 한계
Custom URL Scheme 은 다음과 같은 심각한 단점이 존재한다.
- 앱이 설치되지 않은 경우 (에러페이지로 이동)
- URL 의 중복 가능성. URL 이 고유하지 않으므로, 두 개 이상의 앱이 같은 URL (myphotoapp://) 에 응답하려 하는 경우 발생 가능 (랜덤 실행)
첫 번째는 사용성 문제라 그렇다고 쳐도, 두 번째는 같은 경우 앱에 잠재적인 공격 경로가 생기는 것이다. (헉..)
따라서 Apple 은 이러한 단점들을 보완하는 Universal Link 를 iOS 9 부터 지원, 다음과 같이 가이드하고 있다.
Universal Link 와 Custom URL Scheme 모두 허용되는 Deep Link 형식이지만 Universal Link 를 사용하는 것이 가장 좋습니다. Universal Link 를 사용하는 앱이 설치되면, iOS는 웹 사이트의 Apple App Site Association 파일을 통해 연결을 확인, 다른 앱이 해당 Scheme 을 차지하고 URL을 Redirection 할 가능성을 제거합니다.
Universal Link
Universal Link 도 Deep Link 이기에, 앱 내부의 콘텐츠에 연결할 수 있다. 사용자가 Universal Link 를 탭하면, iOS는 웹 사이트를 통해 라우팅하지 않고 링크를 앱으로 직접 Redirection 한다.
Universal Link 는 위에서 설명한 Custom URL Scheme 의 한계를 다음과 같이 해소한다.
- 앱이 설치되지 않은 경우
Safari 에서 URL을 열어 웹 사이트로 이동한다. (Universal Link 는 표준 HTTP 또는 HTTPS 링크이므로, 하나의 URL이 웹 사이트와 앱 모두에서 작동가능)
- URL 의 중복 가능성
사용자가 앱을 설치하면 iOS는 웹 서버에 저장된 파일 (apple-app-site-association) 을 확인하여 웹 사이트에서 앱이 대신 URL 을 열 수 있도록 허용하는지 확인하는 절차를 수행한다. (화이트리스트와 블랙리스트 지정이 가능하다)
그렇다면 Universal Link 를 적용하는 방법을 알아보자.
- Associated Domains Entitlement 를 앱에 추가한다. applinks 서비스 접두사를 사용하여 앱에서 지원할 모든 도메인을 포함한다.
- XCode 에서 Associated Domains capability 를 활성화한다.
- Apple App Site Association 파일을 웹 사이트에 추가한다.
- 웹 사이트가 해당 앱들을 다룬다고 명시하기 위한 applinks key 섹션을 Apple App Site Association 파일에 추가한다.
참고 링크