앱 및 웹사이트 자동 로그인 사용 설정

비밀번호 대용 Smart Lock을 사용하는 앱이 웹사이트와 사용자 데이터베이스를 공유하는 경우 또는 앱과 웹사이트에서 Google 로그인과 같은 제휴 로그인 제공업체를 사용하는 경우 앱을 웹사이트에 연결하면 사용자가 사용자 인증 정보를 한 번 저장한 다음 앱과 웹사이트에 자동으로 로그인할 수 있습니다.

앱을 웹사이트와 연결하려면 웹사이트에 디지털 애셋 링크 JSON 파일을 호스팅하고 디지털 애셋 링크 파일 링크를 앱의 매니페스트에 추가하여 연결을 선언합니다.

웹사이트에서 디지털 애셋 링크 선언을 호스팅하면 웹사이트에서 Android 8.0 이상을 실행할 때 자동 완성 데이터를 앱과 공유할 수 있습니다.

기본 요건

웹사이트의 로그인 도메인은 HTTPS를 통해 사용할 수 있어야 합니다.

앱과 웹사이트 연결하기

  1. 디지털 애셋 링크 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에 후행 슬래시와 같은 경로를 포함하지 마세요.

    하위 도메인은 일치하지 않는 것으로 간주됩니다. 즉, domainwww.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

    자세한 내용은 디지털 애셋 링크 참조를 참고하세요.

  2. 로그인 도메인의 다음 위치에서 디지털 애셋 링크 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 헤더를 전송하는지 확인합니다.

  3. 호스트가 Google에서 디지털 애셋 링크 파일을 가져오도록 허용하는지 확인합니다. robots.txt 파일이 있으면 Googlebot 에이전트가 /.well-known/assetlinks.json를 검색하도록 허용해야 합니다. 대부분의 사이트에서 /.well-known/ 에이전트가 자동 에이전트의 파일을 검색하도록 허용하면 다른 서비스가 해당 파일의 메타데이터에 액세스할 수 있습니다.

    User-agent: *
    Allow: /.well-known/
    

  4. Android 앱에서 연결을 선언합니다.

    1. 매니페스트 파일의 <application> 아래에 다음 줄을 추가합니다.

        <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
      
    2. 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
      
  5. Google Play 스토어에 앱을 게시합니다. 연결을 선택하려면 공개 채널에 공개해야 합니다.

  6. (선택사항) 비밀번호 대용 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"
    ]
  }
}]

그런 다음 두 앱에서 연결을 선언합니다.

  1. 매니페스트 파일의 <application> 아래에 다음 줄을 추가합니다.

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 다음 문자열 리소스를 strings.xml 파일에 추가합니다.

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>
    

예: 앱을 여러 웹사이트와 연결

디지털 애셋 링크 파일에 각 웹사이트를 지정하고 각 웹사이트에서 파일을 호스팅하여 앱을 여러 웹사이트와 연결할 수 있습니다. 예를 들어 com.examplecom.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"
}]

마지막으로 두 앱에서 연결을 선언합니다.

  1. 매니페스트 파일의 <application> 아래에 다음 줄을 추가합니다.

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 다음 문자열 리소스를 strings.xml 파일에 추가합니다.

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>