라이선스 개요

Google Play 라이선스는 애플리케이션이 신뢰할 수 있는 Google Play 라이선스 서버에 쿼리하여 현재 기기 사용자에게 애플리케이션의 라이선스가 부여되었는지 확인하는 네트워크 기반 서비스입니다. 라이선스 서비스는 Google Play 라이선스 서버의 기능에 기반하여 지정된 사용자에게 주어진 애플리케이션을 사용할 수 있는 라이선스가 부여되었는지 확인합니다. Google Play는 사용자가 애플리케이션의 기록된 구매자인 경우 사용자에게 라이선스가 부여된 것으로 간주합니다.

애플리케이션이 Google Play 클라이언트 애플리케이션에서 호스팅하는 서비스에 요청을 하면 요청이 시작됩니다. 그러면 Google Play 애플리케이션은 요청을 라이선스 서버에 전송하고 결과를 수신합니다. Google Play 애플리케이션은 결과를 애플리케이션에 전송하고 애플리케이션은 필요에 따라 애플리케이션의 추가 사용을 허용하거나 허용하지 않을 수 있습니다.

참고: 앱 버전이 비공개 또는 공개 테스트 트랙에 있는 경우 앱을 다운로드하고 설치할 권한을 부여받은 모든 사용자를 앱의 라이선스가 부여된 사용자로 간주합니다. 자세한 내용은 테스트 트랙을 사용하여 사용자의 소중한 초기 의견 얻기를 참조하세요.

그림 1. 애플리케이션은 Google Play 서버와의 통신을 처리하는 Google Play 클라이언트, 그리고 라이선스 확인 라이브러리를 통해 라이선스 확인을 시작합니다.

참고: 전에는 게시되지 않은 '초안' 버전을 업로드하여 앱을 테스트할 수 있었습니다. 이 기능은 더 이상 지원되지 않습니다. 대신 공개 또는 비공개 테스트 트랙에 게시해야 합니다. 자세한 내용은 초안 앱이 더 이상 지원되지 않음을 참조하세요.

사용자를 올바르게 식별하고 라이선스 상태를 확인하려면 라이선스 서버에는 애플리케이션과 사용자에 관한 정보가 필요합니다. 애플리케이션과 Google Play 클라이언트가 함께 작동하여 정보를 모으고 Google Play 클라이언트가 정보를 서버에 전달합니다.

애플리케이션에 라이선스를 추가할 수 있도록 Android SDK는 애플리케이션 프로젝트에 포함할 수 있는 다운로드 가능한 라이브러리 소스 세트인 Google Market 라이선스 패키지를 제공합니다. 라이선스 확인 라이브러리(LVL)는 애플리케이션에 추가할 수 있는 라이브러리로 Google Play 라이선스 서비스와의 라이선스 관련 통신을 모두 처리합니다. LVL이 애플리케이션에 추가되면 애플리케이션은 메서드를 호출하고 상태 응답을 수신하는 콜백을 구현하여 간단히 현재 사용자의 라이선스 상태를 확인할 수 있습니다.

애플리케이션은 라이선스 서버에 직접 쿼리하지 않고 대신 원격 IPC를 통해 Google Play 클라이언트를 호출하여 라이선스 요청을 시작합니다. 라이선스 요청에서는 다음을 실행합니다.

  • 애플리케이션은 패키지 이름, 나중에 서버의 응답을 검사하는 데 사용되는 nonce, 응답이 비동기식으로 반환될 수 있는 콜백을 제공합니다.
  • Google Play 클라이언트는 기기의 기본 Google 계정 사용자 이름, IMSI 및 기타 정보와 같이 사용자 및 기기에 관한 필요한 정보를 수집합니다. 그런 다음 애플리케이션을 대신하여 라이선스 확인 요청을 서버로 전송합니다.
  • Google Play 서버는 사용 가능한 정보를 모두 사용해 요청을 평가하여 사용자의 ID를 충분히 신뢰할 수 있는 수준으로 설정하려고 합니다. 그런 다음 서버는 사용자 ID를 애플리케이션 구매 기록과 비교하여 확인하고 라이선스 응답을 반환합니다. Google Play 클라이언트는 IPC 콜백을 통해 이 응답을 애플리케이션에 반환합니다.

개발자는 애플리케이션이 라이선스를 확인하는 시기와 빈도를 선택할 수 있으며 애플리케이션이 응답을 처리하고 서명된 응답 데이터를 확인하며 액세스 제어를 시행하는 방법을 완전히 제어할 수 있습니다.

라이선스 확인 중에 애플리케이션은 네트워크 연결을 관리하거나 Android 플랫폼에서 라이선스 관련 API를 사용하지 않습니다.

안전한 라이선스 응답

각 라이선스 쿼리의 무결성을 보장하기 위해 서버는 Google Play 서버와 개발자 사이에 독점적으로 공유되는 RSA 키 쌍을 사용하여 라이선스 응답 데이터에 서명합니다.

라이선스 서비스는 각 애플리케이션의 단일 라이선스 키 쌍을 생성하고 Play Console에 있는 애플리케이션 서비스 및 API 페이지에 공개 키를 노출합니다. Play Console에서 공개 키를 복사하여 애플리케이션 소스 코드에 삽입해야 합니다. 서버는 비공개 키를 내부적으로 유지하고, 이 계정으로 게시한 애플리케이션의 라이선스 응답에 서명하는 데 이 키를 사용합니다.

애플리케이션이 서명된 응답을 수신하면 삽입된 공개 키를 사용하여 데이터를 확인합니다. 라이선스 서비스에서 공개 키 암호화를 사용하면 애플리케이션이 조작되거나 위장된 응답을 감지할 수 있습니다.

라이선스 확인 라이브러리

Android SDK는 라이선스 확인 라이브러리(LVL)가 포함된 Google Market 라이선스 패키지라는 다운로드 가능한 패키지를 제공합니다. LVL은 애플리케이션에 라이선스를 추가하는 프로세스를 크게 단순화하여 애플리케이션을 더 안전하고 강력하게 구현하도록 돕습니다. LVL은 Google Play 클라이언트에 문의하여 라이선스 요청을 시작하고 응답을 확인 및 검사하는 등 라이선스 쿼리의 표준 작업을 대부분 처리하는 내부 클래스를 제공합니다. 라이선스 정책을 정의하고 애플리케이션의 필요에 따라 액세스를 관리하는 맞춤 코드를 쉽게 연결할 수 있는 인터페이스도 노출합니다. 핵심 LVL 인터페이스는 다음과 같습니다.

Policy
구현은 서버에서 수신한 라이선스 응답 및 기타 사용 가능한 데이터(애플리케이션과 연결된 백엔드 서버 등에서 제공하는 데이터)에 기반하여 애플리케이션 액세스 허용 여부를 판단합니다. 구현은 라이선스 응답의 다양한 필드를 평가하고 필요하면 다른 제약 조건을 적용할 수 있습니다. 구현을 통해 오류(예: 네트워크 오류)가 발생하는 라이선스 확인 처리를 관리할 수도 있습니다.
LicenseCheckerCallback
구현은 Policy 객체의 라이선스 응답 처리 결과에 기반하여 애플리케이션 액세스를 관리합니다. 구현은 필요한 어떤 방식으로든 액세스를 관리할 수 있습니다. 예를 들면 라이선스 결과를 UI에 표시하거나 사용자에게 애플리케이션을 구매하도록 안내하는 방식(현재 라이선스가 부여되지 않은 경우)입니다.

Policy를 시작하는 데 도움이 되도록 LVL은 수정 없이 사용하거나 필요에 맞게 조정할 수 있는 완전히 완료된 두 가지 Policy 구현을 제공합니다.

ServerManagedPolicy
유연한 Policy로, 라이선스 서버에서 제공하는 설정을 사용하여 기기가 오프라인 상태일 때(예: 사용자가 비행 중일 때) 응답 캐싱 및 애플리케이션 액세스를 관리합니다. 대부분의 애플리케이션에는 ServerManagedPolicy를 사용하는 것이 좋습니다.
StrictPolicy
제한적 Policy로, 응답 데이터를 캐시하지 않고 서버가 라이선스가 부여된 응답을 반환할 때 애플리케이션 액세스를 허용합니다.

LVL은 다운로드 가능한 Android SDK 패키지로 제공됩니다. 패키지에는 라이브러리가 애플리케이션과 통합되는 방법 및 애플리케이션이 응답 데이터, UI 상호작용, 오류 상황을 관리하는 방법을 보여주는 애플리케이션 예와 LVL 자체가 모두 포함되어 있습니다.

LVL 소스는 Android 라이브러리 프로젝트로 제공되므로 단일 라이브러리 소스 세트를 유지하고 여러 애플리케이션에서 공유할 수 있습니다. 전체 테스트 환경도 SDK를 통해 사용할 수 있으므로 실제 기기에 액세스할 수 없다 하더라도 게시하기 전에 애플리케이션에서 라이선스 구현을 개발 및 테스트할 수 있습니다.

요구사항 및 제한사항

Google Play 라이선스는 Google Play를 통해 게시하는 애플리케이션에 라이선스 제어를 적용할 수 있도록 설계되었습니다. 이 서비스는 Google Play를 통해 게시되지 않거나 Google Play 클라이언트를 제공하지 않는 기기에서 실행되는 애플리케이션의 액세스를 제어할 수 있도록 설계되지 않았습니다.

다음은 애플리케이션에서 라이선스를 구현할 때 유의해야 할 사항입니다.

  • 애플리케이션은 Google Play 클라이언트가 호스트 기기에 설치되어 있고 기기에서 Android 1.5(API 수준 3) 이상을 실행하는 경우에만 서비스를 사용할 수 있습니다.
  • 라이선스 확인을 완료하려면 네트워크를 통해 라이선스 서버에 액세스할 수 있어야 합니다. 라이선스 캐싱 동작을 구현하여 네트워크 연결이 없을 때도 애플리케이션 액세스를 관리할 수 있습니다.
  • 애플리케이션의 라이선스 제어 보안은 궁극적으로 구현 자체의 설계에 달려 있습니다. 이 서비스는 라이선스를 안전하게 확인할 수 있는 기반을 제공하지만 라이선스의 실제 시행 및 처리는 개발자에게 달려 있습니다. 다음 문서의 권장사항을 따르면 구현의 보안을 보장할 수 있습니다.
  • 애플리케이션에 라이선스를 추가해도 Google Play를 제공하지 않는 기기에서 애플리케이션을 실행할 때 애플리케이션이 작동하는 방식에는 영향을 미치지 않습니다.
  • 서비스를 사용하여 APK 확장 파일을 제공하는 경우에만 무료 앱에 라이선스 제어를 구현할 수 있습니다.

복사 방지 교체

Google Play 라이선스는 애플리케이션 액세스를 제어하는 유연하고 안전한 메커니즘입니다. Google Play에서 이전에 제공되었던 복사 방지 메커니즘(더 이상 지원되지 않음)을 효과적으로 교체하여 개발자가 애플리케이션을 더 광범위하게 배포할 수 있습니다.

라이선스를 사용하면 Google Play 액세스 권한이 있는 모든 기기에서 시행할 수 있는 라이선스 기반 모델로 이동할 수 있습니다. 액세스는 호스트 기기의 특성이 아니라 앱의 공개 키를 통한 Google Play의 애플리케이션과 개발자가 정의한 라이선스 정책에 바인딩됩니다. SD 카드를 비롯한 모든 저장소의 모든 기기에 애플리케이션을 설치하고 관리할 수 있습니다.

어떤 라이선스 메커니즘도 모든 무단 사용을 완전히 방지할 수는 없지만, 라이선스 서비스를 사용하면 잠금 또는 잠금 해제된 모든 호환 기기에서 일반적인 사용 유형의 액세스를 대부분 제어할 수 있습니다.

애플리케이션 라이선스를 애플리케이션에 추가하려면 라이선스 설정으로 계속 진행하세요.