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

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