본문 바로가기
공부/스위프트

[스위프트] Deep Link

by 초코팅촉 2024. 2. 3.
728x90

이번에는 Deep Link기술인 URL Scheme과 Universal Link에 대해서 알아보고자 합니다.

 

딥링크(Deep Link)

딥링크는 웹에서 우리가 뭔가 검색하고 앱으로 연결되는 링크를 누르라고 유도하죠?

그겁니다, 그거. 그걸 앱에서 하는 거라고 보면 되죠.

예를 들자면, 네이버앱에서 네이버 지도를 띄우게 한다거나? 그런걸 말하는겁니다.

iOS에는 두 가지 종류가 있는데 URL Scheme과 Universal Link 두 가지가 있습니다.

 

URL Scheme(Custom Scheme)

URL Scheme 혹은 Custom Scheme이라고도 하는 이건 말이죠...

웹의 하이퍼링크랑 똑~같습니다.

앱에서도 마찬가지로 특정 버튼이던 아이콘이던 뭔가 누르는 게 있겠죠?

그럼 해당 버튼을 눌렀을 때 연결된 URL Scheme이 네트워크로 넘어가고

그 Scheme을 받은 서버에서 "아~ 이 링크는 이렇게 하면 돼요" 하고 다시 폰으로 던져줍니다.

그럼 폰에서 해당 작업을 알아서 해주죠.

 

스위프트에서는 Info파일에 Scheme을 아래처럼 등록하고

구현부에서 Scheme://제공된 URL  이렇게 쓰면 됩니다.

아래 예시를 볼까요?

"nmap://actionPath?parameter=value&appname=Bundle_Identifier"

이 예시코드의 경우엔 네이버맵을 실행해 주는 코드입니다.

 

URL Scheme의 장점은...

· 구현이 쉽다.

· 백엔드가 필요 없다.

 

URL Scheme의 단점은...

· 항상 허용여부를 물어본다.

· 다른 플랫폼에선 작동하지 않는다.(각 플랫폼마다 URL형식이 다릅니다.)

 

Universal Link

하지만 URL Scheme에는 문제가 있었습니다.

 

바로 비슷한 이름을 쓰는 앱들이 많아졌다는 거죠.

 

비슷한 이름을 써서 Scheme이 동일했다거나 url구조마저도 같으면 문제가 발생하겠죠?

그래서 이 문제를 해결하기 위해 애플과 구글은 각자의 운영체제에 맞춰

· iOS의 Universal Link(macOS나 watchOS에서도 작동합니다.)

· Android의 App Link

를 출시하게 됩니다.

 

우린 Swift를 공부하고 있으니까 Universal Link를 알아보죠.

Universal Link는 웹과 앱 모두에 속하는 콘텐츠를 표현하는 HTTPS, HTTP URL입니다.

얘도 똑같이 링크를 걸어주는 건 맞습니다. 하지만 좀 다른 점이 있다면 서버와 통신을 하고 결정이 된다는 점이죠.

앞서 말했듯이 웹과 앱 모두에 같은 콘텐츠가 있어야 되니까 앱이 설치된 상태에서 요청을 보내면 앱과 웹 사이의 연결을 정의한 파일을 서버에서 검증합니다. 만약에 앱에 없으면 그냥 시스템이 바로 사파리에서 URL을 열어버립니다.

 

같은 콘텐츠를 보여준다를 전제로 하는 작동이니까 당연하다면 당연하게도

"앱 열건대 허용해줘잉" 하는 alert을 따로 띄울 필요가 없어지죠.

하지만 서버와의 통신을 해야 한다. = 서버가 있어야 한다. 가 성립하게 됩니다. 그래서 자연스레 구현난이도가 올라갑니다.

 

Universal Link는 기존의 URL Scheme을 대체하기 위해 나온 것이니만큼 URL Scheme과는 정반대의 장단점을 가져갑니다.

 

Universal Link의 장점은...

· 허용여부를 묻지 않는다.

· 브라우저를 열지 않는다.

· 다른 플랫폼과도 호환 가능하다.

 

Universal Link의 단점은...

· SSL이 있는 백엔드가 필요합니다.

· 구현의 복잡성이 올라갑니다.

 

다음의 글들을 참고했습니다.

https://dev-dain.tistory.com/270

https://yoojin99.github.io/app/Universal-Link/

https://docs.tosspayments.com/resources/glossary/deep-link