안드로이드 웹 스키마 - andeuloideu web seukima

안녕하세요 점냥입니다 :)

동아리에서 딥 링크에 대해서 공부를 하게 되었는 데 모바일에서 딥링크를 적용하기 위한 방법이 여러 가지가 있더라고요!

그래서 나눠서 적어보려고 합니다.

딥 링크

여러분들은 딥 링크가 무엇인지 알고 있으신가요? 깊은 링크..?

안드로이드 웹 스키마 - andeuloideu web seukima
모바일 딥 링크란

딥 링크정의는 홈페이지가 아닌 홈페이지 내에 특정 화면에 한 번에 도달할 수 있는 링크라고 합니다. 

구글 검색 결과에서 보이는 각종 사이트들은 사실 링크로 연결되어 있죠. 네이버 블로그 글이나 사진에는 안드로이드 공식 개발자 사이트 글들이 보이네요. 그중에 네이버 블로그 글을 클릭하게 되면 이동하여 열리는 페이지는 네이버 블로그 공식 홈페이지로 가는 것이 아니라

딥링크에 대해서 설명되어 있는 개인 블로그로 들어가게 되죠. 이런 게 딥 링크라고 볼 수 있습니다.

https://www.blog.naver.com 일반 링크라면 딥 링크https://www.blog.naver.com/jaeryo2357 라고 할 수 있습니다~

안드로이드 웹 스키마 - andeuloideu web seukima

사실 딥 링크라는 개념은 모바일과 웹에서 모두 사용되는 개념이에요.

웹은 사진처럼 브라우저 상단에 URL이 오픈되어 있어 HTML 등 웹 문서의 위치 그 자체를 링크를 보면 알 수 있어요.

반면 모바일은 URL이 사용자에게 오픈되어 있지 않아요. URL을 사용하지 않는다는 것이 맞을 수도 있어요. 하지만 웹과 동일한 URL로 딥 링크를 사용할 수 있어요. 그럼 어떤 형태로 구현되어 있을까요?

안드로이드 웹 스키마 - andeuloideu web seukima

모바일 환경에서 딥링크는 이런 식으로 구현되어 있어요.

데스크톱이 아닌 모바일 환경에서 네이버 웹툰 앱이 아닌 웹을 통해 네이버 웹툰에 들어간 화면이에요. 그렇게 된다면 네이버 웹툰 웹앱에서 하단에 앱 설치하기 알람이 올라와요. 아무래도 모바일 웹보다는 네이티브 앱이 더 사용자에게 좋은 UX/UI 경험을 줄 수 있을 거예요. 이럴 때 앱을 설치하라는 딥 링크를 사용자에게 추천할 수 있어요.

URL Scheme 방식은 AndroidiOS 모두 사용 가능한 최초의 딥 링크 수단이라고 해요.

scheme://host_path

우선 위의 형태로 정의되어 있는 링크들을 URL Scheme이라고 불러요.

예를 들어 https://www.naver.com 처럼 URL과 market:// 등이 모두 해당해요.

안드로이드 웹 스키마 - andeuloideu web seukima

다른 사이트에서 이 방식을 URI Scheme이라고 설명하고 있는 것을 볼 수도 있어요.

URI은 일종의 리소스를 식별하는 식별자라고 이해하면 되고 우리가 링크에서 사용하는 URL도 이 URI 안에 포함되어 있어요.

따라서 URL이 좀 더 작은 범위이지만 딥 링크에서 사용되는 링크의 형태가 URL이기 때문에 Apple에서 URL Scheme이라고 부르는 것 같아서 저도 동일하게 부르기로 하였습니다!

URL Scheme 적용하기

그럼 이런 URL Scheme를 사용하여 무엇을 하나요?

안드로이드 웹 스키마 - andeuloideu web seukima

URL Scheme은 리소스를 구별하기 용도로 사용하기 때문에 우리 앱을 부르는 고유한 수단으로 사용할 수 있어요.

위 사진처럼 모바일 기기에서 URL Scheme 링크를 클릭했을 때 우리 앱이 캐치하여 반응하게 만드는 거죠.

Android의 Manifest.xml의 intent filter에 대해서 알고 있으신가요?

Android의 Activity가 명시적 인테트가 아닌 암시적 인텐트로 실행되기 위해 사용되는 태그입니다~

안드로이드 웹 스키마 - andeuloideu web seukima

data 태그에 URL Scheme을 정의할 수 있어요. scheme는 mashup, host는 deeplink로 정의하면,

mashup://deeplink 가 우리 앱의 딥 링크로 설정된 거예요! 

URL Scheme 값 전달

mashup://deeplink?date=20210206&message=전체 세미나

URL 파라미터처럼? 뒤에 매개변수 데이터를 전달하고 앱에서 받는 상황이 있을 수 있어요.

웹툰 딥 링크 예시를 보아도 더복서 웹툰 작가 등등 동일한 딥 링크의 다른 작가 화면으로 보여주어야 할 때 매개변수가 필요하겠죠.

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main)

        val action: String? = intent?.action
        val data: Uri? = intent?.data

	if (action == Intent.ACTION_VIEW) {
		val date = data?.getQueryParameter("date")  //20210206
		val message = data?.getQueryParameter("message") //전체 세미나

		...
	}
 }

URL Scheme의 한계점

URL Scheme 방식의 딥링크는 마켓 앱의 수가 상대적으로 적었던 시기에는 문제없이 사용할 수 있었지만,

앱 수가 증가하면서 생각하지 못한 문제가 발생하기 시작하였습니다. 바로 앱 스킴 값이 서로 중복되는 경우에 대한 문제입니다.

안드로이드 웹 스키마 - andeuloideu web seukima

Google Play 스토어 앱은 자신들의 앱에서 market:// 사용 중이었는데, 이후 원스토어와 Galaxy Store도 동일한 URL Scheme를 사용하게 되었다고 해요. 유명한 앱의 스킴 값을 알아내서 동일한 스킴으로 앱을 배포를 하는 사람들이 늘어나게 되면서 유명한 앱들이 골치 아프게 되기 시작한 거죠.

안드로이드 웹 스키마 - andeuloideu web seukima

동일한 URL Scheme을 사용하여 딥 링크를 클릭하게 되면 위와 같은 화면이 보이게 됩니다.

여기서 사용자가 market:// 에 대한 딥 링크를 통해 열리는 앱을 원스토어로 고정하는 순간 Google Play Store 앱과 Galaxy Store 앱은 이후 딥 링크의 기능을 잃어버리게 되죠. 

URL Scheme 방식은 정말 간단한 게 딥 링크를 추가하는 방법이었지만, 간단한 만큼 다른 앱들도 동일하게 추가할 수 있다는 단점이 생겨버린 URL Scheme이었습니다. 다음 블로그에서는 위의 한계점을 해결한 딥링크의 종류에 대해서 알아보도록 하겠습니다~