비밀번호 대용 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>