iOS Universal Link

Hoontopia
hoontopia
Published in
6 min readAug 19, 2019

Apple 은 iOS 9 미만은 Custom URL Scheme, 그 이상부터는 Custom URL Scheme + Universal Link 를 지원한다. 따라서 iOS 개발자에겐 Custom URL Scheme 을 정의 하거나 Universal Link 를 사용하는 두 가지 선택지가 있다.

이게 다 무슨 소리인고…

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 을 지원하도록 할 수 있다.

  1. 앱 URL 의 포맷 지정 (myphotoapp:albumname?index=1 와 같이, URL은 2번에서 등록할 Custom Scheme 으로 시작해야한다.)
  2. 다음과 같이 시스템이 적절한 URL 을 앱으로 보낼 수 있도록, Xcode 프로젝트 설정 내 정보 탭에서 Scheme 등록 (예, myphotoapp)
URL Type Section

앱으로 전달되는 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 를 적용하는 방법을 알아보자.

  1. Associated Domains Entitlement 를 앱에 추가한다. applinks 서비스 접두사를 사용하여 앱에서 지원할 모든 도메인을 포함한다.
  2. XCode 에서 Associated Domains capability 를 활성화한다.
  3. Apple App Site Association 파일을 웹 사이트에 추가한다.
  4. 웹 사이트가 해당 앱들을 다룬다고 명시하기 위한 applinks key 섹션을 Apple App Site Association 파일에 추가한다.

참고 링크

--

--