안드로이드 딥 링크 기술 가이드: URI 스킴

이 문서는 안드로이드 딥 링크 기술 가이드 4부 문서 중 1부입니다. 다음 포스트는 크롬 인텐트안드로이드 앱 링크, 및 구글 플레이 리퍼러에 관해 다룰 것입니다.

현재까지, 안드로이드는 개발자가 다루는 가장 파편화된 플랫폼 중 하나인데 이는 구글이 각 장치 제조업체가 OS를 포팅하고 하위 호환성을 유지하며 지원되는 다수의 장치를 지원책임을 맡도록 강제하기 때문입니다. 이로 인해 종종 맥락에 최적의 방법 적용을 담보하기 위하여 긴 구문을 만들어야 하는 결과를 가져옵니다.

안드로이드 딥 링크하고 해서 다르지 않습니다. 우리는 수년간 사용자의 환경과 맥락에 따른 넘쳐나는 기술 요구사항을 보아왔습니다. 다행히, Branch는 모든 이러한 구현 사항을 묶어 모든 경계 조건에서도 작동하는 링크 플랫폼을 생성합니다. Branch 링크는 이러한 복잡한 부분을 수용하고 표준화하므로 이에 대해 걱정할 필요가 없습니다. 모든 것을 무료로 제공하므로 처음부터 새로 구축하는 것보다 우리 도구를 사용하는 것을 강력히 추천합니다.

본 시리즈에서는 우리가 채용한 모든 다양한 딥 링크 메커니즘을 요약하고, 어떻게 작동하는지, 어떻게 구현하였는지 설명할 것입니다.

start.branch.io 혹은 하단 버튼으로 시작할 수 있습니다.

안드로이드 URI 스킴 및 인텐트 필터

URI 스킴 딥 링크 메커니즘은 안드로이드 1.0에서 만들어졌습니다. 개발자가 일단 앱을 설치하면 특정 장치에 대해 앱의 URI (uniform resource identifier)를 운영 체제에 등록할 수 있습니다. URI는 HTTP, pinterest, fb 혹은 myapp과 같은 특수 문자를 포함하지 않는 어떤 문자열도 될 수 있습니다. 한번 등록하면, 끝에 ://를 붙이고 (예를 들어 pinterest://) 링크를 클릭하기만 하면 Pinterest 앱이 구동됩니다. 만약 Pinterest 앱이 설치되지 않았다면 다음의 Page Not Found 에러를 보게 될 것입니다.

안드로이드 URI 스킴 요구사항
  • 인텐트 필터를 통해 URI에 응답할 액티비티를 매니페스트 파일에 등록합니다.
  • 이를 사용하기 위해 앱을 반드시 설치해야 합니다. 앱이 설치되지 않았다면 에러가 발생될 것입니다.
안드로이드 URI 스킴 설정 방법

앱의 URI 스킴은 간단히 설정할 수 있습니다. 시작하려면 URI 스킴이 트리거되었을 때 구동할 액티비티를 선택하고 이를 위해 인텐트 필터를 등록해야 합니다. 구동하려고 하는 액티비티에 해당하는 매니페스트 파일의<activity /> 태그 내에 다음 코드를 추가하십시오.

<intent-filter>
<data android:scheme=your_uri_scheme />
<action android:name=android.intent.action.VIEW />
<category android:name=android.intent.category.DEFAULT />
<category android:name=android.intent.category.BROWSABLE />
</intent-filter>
view rawuri.xml hosted with ❤ by GitHub

 

your_uri_scheme을 원하는 URI 스킴으로 바꿀 수 있습니다. 이상적으로는, 이는 고유한 것이어야 합니다. 만약 이것이 다른 앱의 URI 스킴과 겹치면, 사용자가 링크를 클릭했을 때 안드로이드 선택 창을 보게 됩니다. 만약 여러 개의 브라우저를 설치하였다면 이들은 모두 HTTP URI를 등록하므로 이 선택 창을 자주 보게 됩니다.

안드로이드 앱에서 딥 링크 다루기

앱에서 딥 링크를 다루려면, 클릭하면 열리는 액티비티의 인텐트 데이터 문자열을 가져오기만 하면 됩니다. 아래 예제를 참고하세요:

Uri data = this.getIntent().getData();
if (data != null && data.isHierarchical()) {
String uri = this.getIntent().getDataString();
Log.i(“MyApp”, “Deep link clicked “ + uri);
}
view rawintent.java hosted with ❤ by GitHub

 

불행하게도 여기에서 URI 스킴에 추가된 값을 읽으려면 문자열을 파싱해야 합니다.

안드로이드 URI 스킴 실제 사용

딥 링크 URI 방법은 매우 제한적이며 앱이 설치되어 있지 않으면 에러 메시지가 발생하므로 크게 수정하지 않는다면 권장하지 않습니다. URI 스킴 그 자체를 효과적으로 사용하려면 앱이 설치되어 있지 않은 경우 등의 경계 조건을 처리하도록 몇 가지 도구를 빌드할 필요가 있습니다.

앱이 설치되어 있지 않은 경우에도 사용자가 좋은 경험을 하도록 하려면 URI 스킴을 브라우저에서 작동하는 클라이언트 측 자바스크립트로 둘러싸야 합니다. 이 자바스크립트를 서버에서 호스팅하고 사용자에게 링크를 보냅니다. 아래 예제를 참고하세요:

var fallbackFunction = function() {
window.location.replace(‘market://details?id=com.myapp.package’);
};
var addIFrame = function() {
var iframe = document.createElement(“iframe”);
iframe.style.border = “none”;
iframe.style.width = “1px”;
iframe.style.height = “1px”;
iframe.src = ‘your_uri_scheme://’;
document.body.appendChild(iframe);
};
addIFrame();
setTimeout(fallbackFunction, 250);
view rawclient.js hosted with ❤ by GitHub

 

이 코드는 URI 스킴의 iFrame 소스를 설정하여 앱 구동을 시도하며 구동에 실패하는 경우에는 안전하게 구글 플레이 스토어로 돌아가게 됩니다.

결론

안드로이드 딥 링크에 관해 연재할 이 시리즈의 포스트에 주목해주세요.

4.4.4를 사용하는 동안 링크가 페이스북에서 작동하지 않는다고 불평하는 사용자 한 명을 만나게 될 때까지는 모든 것이 잘 돌아가고 있다고 생각할 것입니다. 이것이 바로 그런 사태를 피하고 링크가 어디서나 잘 작동하는 것을 확신하기 위하여 Branch와 같은 도구를 사용해야 하는 이유입니다.