비밀번호 대용 Smart Lock을 사용하는 앱이 사용자 데이터베이스를 웹사이트와 공유하는 경우(또는 앱과 웹사이트에서 Google 로그인과 같은 제휴 로그인 제공업체를 사용하는 경우) 앱을 웹사이트와 연결하여 사용자가 사용자 인증 정보를 한 번 저장하면 자동으로 앱과 웹사이트 모두에 로그인하도록 할 수 있습니다.
앱을 웹사이트와 연결하려면 웹사이트에서 디지털 애셋 링크 JSON 파일을 호스팅하고 디지털 애셋 링크 파일의 링크를 앱의 매니페스트에 추가하여 연결을 선언합니다.
또한 웹사이트에서 디지털 애셋 링크 선언을 호스팅하면 Android 8.0 이상에서 실행될 때 웹사이트에서 자동 완성 데이터를 앱과 공유할 수 있습니다.
기본 요건
HTTPS를 통해 웹사이트의 로그인 도메인을 사용할 수 있어야 합니다.
앱과 웹사이트 연결하기
디지털 애셋 링크 JSON 파일을 만듭니다.
예를 들어 웹사이트
https://signin.example.com
과 패키지 이름이com.example
인 Android 앱이 로그인 사용자 인증 정보를 공유할 수 있다고 선언하려면 다음 콘텐츠가 포함된assetlinks.json
라는 파일을 만듭니다.[{ "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "web", "site": "https://signin.example.com" } }, { "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": [ "F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B" ] } }]
relation
필드는 선언되는 관계를 설명하는 하나 이상의 문자열 배열입니다. 앱과 사이트에서 로그인 사용자 인증 정보를 공유한다고 선언하려면delegate_permission/common.get_login_creds
문자열을 지정합니다.target
필드는 선언이 적용되는 애셋을 지정하는 객체입니다. 다음은 웹사이트를 식별하기 위한 필드입니다.namespace
web
site
https://domain[:optional_port]
형식의 웹사이트 URL(예:https://www.example.com
).domain는 정규화되어야 하며, HTTPS에 포트 443을 사용할 때는 optional_port를 생략해야 합니다.
site
타겟은 루트 도메인만 될 수 있으며 앱 연결을 특정 하위 디렉터리로 제한할 수 없습니다. URL에 후행 슬래시와 같은 경로를 포함하지 마세요.하위 도메인은 일치하는 것으로 간주하지 않습니다. 즉, domain을
www.example.com
으로 지정하면 도메인www.counter.example.com
은 앱과 연결되지 않습니다.다음은 Android 앱을 식별하기 위한 필드입니다.
namespace
android_app
package_name
앱의 매니페스트에 선언된 패키지 이름입니다. 예: com.example.android
sha256_cert_fingerprints
앱 서명 인증서의 SHA256 지문입니다. $ keytool -list -v -keystore my-release-key.keystore
명령어를 사용하여 디지털 지문을 생성할 수 있습니다.자세한 내용은 디지털 애셋 링크 참조를 확인하세요.
디지털 애셋 링크 JSON 파일을 로그인 도메인의 다음 위치에 호스팅합니다.
https://domain[:optional_port]/.well-known/assetlinks.json
예를 들어 로그인 도메인이
signin.example.com
이면https://signin.example.com/.well-known/assetlinks.json
에서 JSON 파일을 호스팅합니다.디지털 애셋 링크 파일의 MIME 유형은 JSON이어야 합니다. 서버가 응답에
Content-Type: application/json
헤더를 전송하는지 확인합니다.Google이 디지털 애셋 링크 파일을 가져오도록 호스트에서 허용하는지 확인해야 합니다.
robots.txt
파일이 있으면 이 파일을 통해 Googlebot 에이전트가/.well-known/assetlinks.json
을 가져올 수 있어야 합니다. 대부분의 사이트는 다른 서비스가/.well-known/
경로에 있는 파일의 메타데이터에 액세스할 수 있도록 자동화된 에이전트가 이러한 파일을 가져오도록 허용할 수 있습니다.User-agent: * Allow: /.well-known/
Android 앱에서 연결을 선언합니다.
매니페스트 파일의
<application>
아래에 다음 줄을 추가합니다.<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
asset_statements
문자열 리소스를strings.xml
파일에 추가합니다.asset_statements
문자열은 로드할assetlinks.json
파일을 지정하는 JSON 객체입니다. 문자열에서 사용하는 아포스트로피와 따옴표는 이스케이프 처리해야 합니다. 예를 들면 다음과 같습니다.<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
> GET /.well-known/assetlinks.json HTTP/1.1 > User-Agent: curl/7.35.0 > Host: signin.example.com < HTTP/1.1 200 OK < Content-Type: application/json
Google Play 스토어에 앱을 게시합니다. 연결을 선택하려면 공개 채널에 공개해야 합니다.
(선택사항) 비밀번호 대용 Smart Lock 제휴 양식을 작성하여 제출하여 절차를 완료했음을 표시합니다. Google은 양식을 통해 제출된 제휴가 실제로 작동하는지 정기적으로 확인하며, 문제가 있는 경우 연락을 취할 수도 있습니다.
확인이 완료되면 앱 사용자가 앱 또는 웹사이트에 사용자 인증 정보를 저장하면 자동으로 둘 다에 로그인됩니다.
예: 여러 앱을 하나의 웹사이트와 연결
디지털 애셋 링크 파일에 각 앱을 지정하여 웹사이트와 여러 앱을 연결할 수 있습니다. 예를 들어 com.example
및 com.example.pro
앱을 https://signin.example.com/
에 있는 사이트와 연결하려면 https://signin.example.com/.well-known/assetlinks.json
에서 호스팅되는 JSON 파일에 두 앱을 모두 지정합니다.
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
그런 다음 두 앱에서 연결을 선언합니다.
매니페스트 파일의
<application>
아래에 다음 줄을 추가합니다.<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
다음 문자열 리소스를
strings.xml
파일에 추가합니다.<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
예: 앱을 여러 웹사이트와 연결
디지털 애셋 링크 파일에 각 웹사이트를 지정하고 각 웹사이트에서 파일을 호스팅하여 앱을 여러 웹사이트와 연결할 수 있습니다. 예를 들어 com.example
및 com.example.pro
앱을 https://signin.example.com/
및 https://m.example.com/
의 사이트와 연결하려면 https://signin.example.com/.well-known/assetlinks.json
에서 호스팅되는 JSON 파일에 앱과 두 사이트를 모두 지정합니다.
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://m.example.com"
},
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
그런 다음 https://m.example.com/.well-known/assetlinks.json
에 호스팅된 JSON 파일에 기본 디지털 애셋 링크 파일을 포함합니다.
[{
"include": "https://signin.example.com/.well-known/assetlinks.json"
}]
마지막으로 두 앱에서 연결을 선언합니다.
매니페스트 파일의
<application>
아래에 다음 줄을 추가합니다.<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
다음 문자열 리소스를
strings.xml
파일에 추가합니다.<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>