Chrome과 Android Custom Scheme


안드로이드 Intent를 통해 Custom Scheme을 호출하여 직접 응용프로그램을 시작할 수 있다. 예를 들어 market://detail?id=com.android.chrome 링크를 걸면 구글 PlayStore의 Chrome브라우저 설치 화면으로 이동한다. 

Custom Scheme을 받을 수 있는 앱이 설치 되어야 해당 화면으로 넘어가고, 설치 되어 있지 않다면 링크가 깨지게 되는데, 웹 개발자는 이 링크가 유요한가를 확인 하기위해 iframe으로 url의 유효성을 확인 하게 된다.

<iframe src=”market://detail?id=com.android.chrome”></iframe>

하지만 Chrome App 버전 25부터 iframe을 이용할 수 없다. iframe에서 Custom Scheme이 더 이상 작동하지 않는다. 대신 다른 방법을 추천한다. 

추천하는방법

아래 구문으로 호출을 하도록 추천한다.

intent:

   HOST/URI-path // Optional host 

   #Intent; 

      package=[string]; 

      action=[string]; 

      category=[string]; 

      component=[string]; 

      scheme=[string]; 

예제

Zxing 바코드 스캐너 앱을 싱실행하는 Custome Scheme을 이용해서 실행 해본다. 

zxing://scan

→ intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end

기존 Custom Scheme은 앱설치가 안 된경우를 대비해 iframe을 통해 유효성을 확인한다. 하지만 변경된 Intent Scheme을 이용하게 되면 설치 된경우 해당 Scheme으로 이동하며, 설치가 안된 경우 package명을 통해 Google PlayStore로 이동하게 된다. 

추가 테스트 사항- 

안드로이드의 크롬 브라우저 앱 / 기본 브라우저 앱 작동

앱 설치(유): 정상 앱 실행

앱 설치(무): 구글 PlayStore로 이동

데스크탑 

크롬 브라우저 앱: 링크 반응 없음

사파리 브라우저 앱: 링크 깨짐(찾을수 없는 페이지) 

데스크탑 크롬의 경우 내부적으로 intent://일 경우 링크깨짐을 방지 하고 있으나 다른 브라우저의 경우 링크가 깨져버린다.(기존과 동일하며 이런 문제를 해결하기위해서 http Url과 Custom Scheme Url을 동일하게 만들면 된다.) 안드로이드 앱의 경우 OS에서 지원하기 때문에 브라우저에 관계 없이 모두 정상 작동한다.