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에서 지원하기 때문에 브라우저에 관계 없이 모두 정상 작동한다. 

“Chrome과 Android Custom Scheme”에 대한 2개의 생각

  1. 안녕하세요?
    웹에서 앱을 실행하는 기능을 구현중에 있습니다.
    자신의 모바일에 구글에 등록된 앱이 있을경우 ‘실행’ 없으면 ‘구글스토어’로 이동하게끔 구현을 완료하였습니다. 그런데 현재 저희 서비스에서는 apk를 내려받은 회원이 있기에 … apk설치 유무를 확인해서 구글에 등록된 앱을 설치시키거나 apk를 실행해야하는데.. 구현이 잘 안되네요…

    iframe을 이용해서 하고싶은데.. 링크가 깨지는 현상이 생기는데 방법이 없을까요?

  2. intent:// 스킴을 사용한다면 기본적으로 앱이 설치 되어 있으면 앱을 실행하고 없는 경우 구글 플레이 스토어로 이동하게 됩니다. 단, 크롬 브라우저에서만 적용되는 사항이기때문에 다른 브라우저는 링크가 깨져 설치 유무를 확인 후에 분기 처리하는 방법을 iframe방법으로 생각하고 계신것 같습니다.

    관련된 내용은 아래 링크를 통해 확인 하시면 될것 같습니다.
    https://github.com/nhnent/tui.component.m-app-loader/wiki/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-APP-%EC%8B%A4%ED%96%89-%EB%98%90%EB%8A%94-%ED%8A%B9%EC%A0%95-url%EB%A1%9C-%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%9D%B4%EB%8F%99

댓글 남기기