개요
Digital Asset Links 프로토콜과 API를 사용하면 앱이나 웹사이트가 다른 앱이나 웹사이트에 관한 확인 가능한 문을 공개할 수 있습니다. 예를 들어 웹사이트는 특정 Android 앱과 연결되어 있다고 선언하거나 다른 웹사이트와 사용자 인증 정보를 공유하고 싶다고 선언할 수 있습니다.
디지털 애셋 링크를 사용할 수 있는 몇 가지 예는 다음과 같습니다.
- 웹사이트 A는 앱이 설치되어 있는 경우 모바일 기기에서 지정된 앱으로 연결되는 링크를 열어야 한다고 선언합니다.
- 웹사이트 A는 사용자가 웹사이트 A에 로그인한 경우 웹사이트 B에 로그인하지 않아도 되도록 웹사이트 B와 Chrome 사용자 인증 정보를 공유할 수 있다고 선언합니다.
- 앱 A는 위치와 같은 기기 설정을 웹사이트 B와 공유할 수 있다고 선언합니다.
핵심 용어
- 주체: 주체는 명세서를 작성하는 앱 또는 웹사이트입니다. 디지털 애셋 링크에서 주체는 항상 명령문 목록을 호스팅하는 앱 또는 웹사이트입니다.
- 문 목록: 문은 하나 이상의 문을 포함하는 문 목록에 포함됩니다. 명세 목록은 일반 텍스트이며 주체에 의해 제어되고 스푸핑하거나 조작하기 어려운 위치에서 공개적으로 액세스할 수 있습니다. 독립형 파일이거나 더 큰 항목의 섹션일 수 있습니다. 예를 들어 웹사이트에서는 전체 파일이고 Android 앱에서는 앱 매니페스트의 섹션입니다. 명세서는 독점적이지 않은 방법을 사용하여 누구나 보고 확인할 수 있습니다. 자세한 내용은 명령문 목록 문서를 참고하세요.
- 문: 문은 관계 (문에서 하라고 하는 작업, 예를 들어 '사용자 인증 정보 공유 사용 설정')와 타겟 (관계가 적용되는 웹사이트 또는 앱)으로 구성된 엄격하게 구조화된 JSON 구조입니다. 따라서 각 문은 주체가 타겟에 관해 관계를 말하는 문장과 같습니다.
- 명세 소비자: 명세 소비자는 주 구성원에게 명세 목록을 요청하고, 지정된 주 구성원에 대한 명세의 존재를 확인하며, 명세가 있는 경우 지정된 작업을 실행할 수 있습니다. 자세한 내용은 명령문 사용 문서를 참고하세요.
간단한 사용 예
다음은 웹사이트 www.example.com이 디지털 애셋 링크를 사용하여 해당 사이트의 URL로 연결되는 링크가 브라우저가 아닌 지정된 앱에서 열리도록 지정하는 방법에 대한 매우 간단한 예입니다.
- 웹사이트 www.example.com은 https://www.example.com/.well-known/assetlinks.json에 명령문 목록을 게시합니다. 사이트의 명세 목록에 대한 공식 이름과 위치입니다. 다른 위치에 있거나 다른 이름이 지정된 명세 목록은 이 사이트에 유효하지 않습니다. 예에서 명령문 목록은 사이트에서 링크를 열 수 있는 권한을 Android 앱에 부여하는 하나의 명령문으로 구성됩니다.
문 목록은 [ ] 표시 내에 문 배열을 지원하지만 예시 파일에는 문이 하나만 포함되어 있습니다.[{ "relation": ["delegate_permission/common.handle_all_urls"], "target" : { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["hash_of_app_certificate"] } }]
sha256_cert_fingerprints
은 앱 서명 인증서의 SHA256 지문입니다. 자세한 내용은 Android App Links 문서를 참고하세요. - 위의 문에 나열된 Android 앱에는 처리하려는 URL의 스키마, 호스트, 경로 패턴(이 경우 https://www.example.com)을 지정하는 인텐트 필터가 있습니다. 인텐트 필터에는 Android M에 새로 도입된 특수 속성
android:autoVerify
가 포함되어 있습니다. 이는 앱이 설치될 때 Android가 인텐트 필터에 설명된 웹사이트의 문을 확인해야 함을 나타냅니다. - 사용자가 앱을 설치합니다. Android는
autoVerify
속성이 있는 인텐트 필터를 확인하고 지정된 사이트에 명령문 목록이 있는지 확인합니다. 있는 경우 Android는 해당 파일에 앱에 링크 처리를 부여하는 명령문이 포함되어 있는지 확인하고 인증서 해시로 명령문에 대해 앱을 확인합니다. 모든 것이 확인되면 Android는 https://www.example.com 인텐트를 example.com 앱으로 전달합니다. - 사용자가 기기에서 https://www.example.com/puppies 링크를 클릭합니다. 이 링크는 브라우저, Google Search Appliance 제안 등 어디에나 있을 수 있습니다. Android는 인텐트를 example.com 앱으로 전달합니다.
- example.com 앱이 인텐트를 수신하고 이를 처리하도록 선택하여 앱에서 강아지 페이지를 엽니다. 어떤 이유로든 앱이 링크 처리를 거부했거나 앱이 기기에 없는 경우 링크는 해당 인텐트 패턴과 일치하는 다음 기본 인텐트 핸들러 (일반적으로 브라우저)로 전송됩니다.
중요 고려사항 및 제한사항:
- 이 프로토콜은 명시하는 주체를 인증하지 않지만 명시는 주체와 강력하게 연결되고 주체의 통제 하에 있는 특정 위치에 있습니다.
- 이 프로토콜은 명령문 타겟을 인증하지는 않지만 호출자가 타겟을 인증할 수 있는 수단을 제공합니다 (예를 들어 명령문은 인증서 해시와 패키지 이름으로 모바일 앱 타겟을 식별함).
- 이 프로토콜은 기본적으로 어떤 명령문 작업도 실행하지 않습니다. 대신 명령문을 노출하는 기능을 지원하며, 사용하는 애플리케이션은 이를 검증한 후 명령문에 따라 어떻게 행동할지 결정해야 합니다. Android M은 이러한 단계를 기본적으로 실행합니다. 예를 들어 웹사이트가 링크 처리를 특정 앱에 위임하는 경우 Android는 명령문을 확인하고 검증하고, 타겟 앱을 검증한 다음, 앱에 지정된 링크를 처리하는 옵션을 제공합니다.
- 이 프로토콜은 두 개의 서드 파티에 관한 설명을 지원하지 않습니다. 즉, 웹사이트 A는 웹사이트 B에 관한 설명을 할 수 있지만 웹사이트 A는 웹사이트 B와 웹사이트 C의 관계에 관한 설명을 할 수 없습니다. 하지만 웹사이트 B가 웹사이트 A를 신뢰하는 경우 웹사이트 C에 권한을 부여하는 문을 웹사이트 A에서 확인하고 이를 구현할 수 있습니다.