ALC(Application License Checker) V2 적용

ALC 라이브러리 종속 항목 추가

프로젝트 최상위 build.gradle 파일에 원스토어 maven 주소를 등록합니다.

Android Studio (version: bumblebee) 에서는 settings.gradle에서 추가합니다.


...

buildscript {
    repositories {
        ...
        maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public' }
    }
}  
...

다음 앱의 build.gradle 파일에 원스토어 ALC 라이브러리 종속 항목을 추가합니다.


...
 
dependencies {
	def onestore_sdk_version = "2.0.0"
	implementation "com.onestorecorp.sdk:sdk-licensing:$onestore_sdk_version"
}
...

AndroidManifest.xml에 queries 추가

아래의 두 가지의 경우 원스토어 공지사항을 참조하여 설정 바랍니다.

Android 11 이상 (Target SDK 30 이상) 일 경우, queries를 추가하여야 합니다.


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dev.sample">
    <queries>
        <intent>
            <action android:name="com.onestore.extern.licensing.LicensingService.ACTION" />
        </intent>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="onestore" />
        </intent>
    </queries>
...

ONE store Login을 위한 configuration 추가

프로젝트 최상위 build.gradle 파일에 원스토어 maven 주소를 등록합니다.

ALC 라이브러리 종속 항목 추가시 사전 작업과 동일합니다.


...

buildscript {
    repositories {
        ...
        maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public' }
    }
}  
...

다음은 앱의 build.gradle 파일에 원스토어 configuration 라이브러리 종속 항목을 추가합니다.


...
 
dependencies {
	def onestore_configuration_version = "1.0.0"
	implementation "com.onestorecorp.sdk:sdk-configuration-kr:$onestore_configuration_version"
}
...

 

AppLicenseChecker 초기화

Application License Checker를 사용하여 사용자의 구매 라이센스를 요청하려면 AppLicenseChecker의 instance를 생성해야 합니다.

라이센스 검증을 위해 개발자 센터에서 발급받은 라이센스 키를 전달해야 합니다. 또한, 유효한 라이센스를 보유 하고 있는지에 대한 결과는 LicenseCheckerListener를 통해 전달되기 때문에 초기화시 Listener도 생성해야 합니다.

라이센스 키 저장

라이센스 키의 경우, 앱 내 코드로 저장하기 보다는 보안이 될 수 있도록 서버 등을 이용하여 전달받아 사용하는 것을 권장합니다.

override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)
	...
	val appLicenseChecker = AppLicenseChecker.get(this@MainActivity, getString(R.string.publick_key, new AppLicenseListener())
}

...
inner class AppLicenseListener : LicenseCheckerListener {
	override fun granted(license: String, signature: String) {}

	override fun denied() {}  
	
	override fun error(code: Int, message: String) {}
} 

Callback 등록

AppLicenseChecker 초기화시 LicenseCheckerListener를 필수로 등록하여야 합니다.

LicenseCheckeerListener 는 라이선스 확인 결과를 처리하기 위해 제공하는 인터페이스 입니다. 라이선스 확인 결과는 항상 LicenseCheckeerListener 메서드 중 하나를 호출합니다.

granted(), denied(), error() 3가지의 메소드를 가지며, 간단한 결과처리 동작을 사용할 수 있습니다. error() 메소드에서는 에러 코드와 메세지를 전달합니다. 에러코드는 아래 응답코드를 참고하시기 바랍니다.

class AppLicenseListener : LicenseCheckerListener {
	override fun granted(license: String, signature: String) {
		// 라이센스 체크 성공
	}

	override fun denied() {
		// 라이센스 체크 거절
	}  
	
	override fun error(code: Int, message: String) {
		// 라이센스 체크 에러 발생
	}
} 

라이센스 검증 요청하기

라이센스 체크 호출시 원스토어 서버와의 통신을 통해 라이센스를 전달받게 됩니다. 네트워크 장애 상황이나 비행기 모드 등 으로 인해 사용자가 정상적으로 원스토어 서버에 접근하지 못하는 경우에는 일반적으로 캐시정책을 사용하여 캐시된 라이센스의 유효 기간 동안 앱의 실행을 보장합니다. 만약 캐시 정책을 사용하지 않고 싶은 경우 strictQueryLicense API 를 통해 캐시된 라이센스를 이용하지 않고 사용 가능합니다.

QueryLicense API (Cached API) 호출

캐시 정책을 동반하여 동작합니다. 일반적으로 원스토어 서버를 통해 사용자의 구매 이력 라이센스를 전달 받지만, 네트워크 장애나 비행기 모드 등 원스토어 서버에 접근이 불가할 때, 로컬에 캐시된 라이센스를 이용하여 유효기간까지 실행을 보장해주는 방식입니다.

appLicenseChecker.queryLicense()

StrictQueryLicense API (Non-Cached API) 호출

캐시된 라이센스를 사용하지 않습니다. 네트워크 장애 상황이나 비행기 모드 등에서 해당 API를 사용하였을 경우, 원스토어 서버에 접근이 불가능한 상태이기 때문에 사용자가 앱을 이용할 수 없습니다.

appLicenseChecker.strictQueryLicense()

연결 해제

AppLicenseChecker의 destroy 함수를 호출하여 원스토어 서비스와의 연결을 해제하는 것을 권장합니다.


override fun onDestroy() {
	if (null != appLicenseChecker) {
		appLicenseChecker.destroy()
	}
	
	super.onDestory()
} 

응답코드

아래 표는 원스토어 ALC 라이브러리에서 애플리케이션으로 전달되는 Error에 대한 응답코드 및 메시지 입니다. 라이브러리를 이용하는 애플리케이션에서는 응답코드에 대해 처리 해야 합니다.

Response CodeValueDescription(KR)Description(EN)How to handle

RESULT_OK

0

성공

Success

ERROR_CLIENT_NOT_ENABLED

1010

원스토어에 연결할 수 없습니다. 원스토어 앱 실행이 필요합니다.

Unable to connect to the store. ONE store app execution is required.

ERROR_SERVICE_UNAVAILABLE

2000

서비스를 이용할 수 없는 상태입니다.

The service is unavailable.

원스토어에 문의해주세요.

ERROR_DATA_PARSING

2001

파라메터가 유효하지 않습니다.

Parameter is invalid.

원스토어에 문의해주세요.

ERROR_SIGNATURE_VERIFICATION

2002

라이선스 키가 맞지 않거나 구매 내역이 없는 유저 입니다.

The license key is not matched, or the user does not have a purchase history.

원스토어 개발자 센터에서 라이센스 키를 확인해주세요.

ERROR_SERVICE_TIMEOUT

2100

서비스 응답이 없습니다.

There is no response.

네트워크 상태를 체크해주세요.

ERROR_USER_LOGIN_CANCELD

2101

사용자가 로그인을 취소하였습니다.

User canceled login.

원스토어 로그인을 해주세요.

ERROR_INSTALL_USER_CANCELED

2103

원스토어 서비스 설치를 취소하였습니다.

ONE store install has been canceled. Do you want to ONE store installation?

원스토어를 설치해주세요.

ERROR_NOT_FOREGROUND

2104

백그라운드 서비스에서는 진행할 수 없습니다.

Can not run the context is not instance of Activity.

RESULT_UNKNOWN

-1

알 수 없는 오류가 발생하였습니다.

An unknown error occurred.

원스토어에 문의해주세요.

RESULT_USER_CANCELED

1

사용자가 로그인을 취소하였습니다.

User canceled login.

원스토어 로그인을 해주세요.

RESULT_SERVICE_UNAVAILABLE

2

단말 또는 서버 네트워크 오류가 발생하였습니다.

A device or server network error has occurred.

네트워크 상태를 체크해주세요.

RESULT_ALC_UNAVAILABLE

3

ALC api 버전 정보가 낮습니다. 해당 라이브러리를 업데이트 해주세요.

The ALC api has the lower version. Please update the corresponding library.

ALC 라이브러리를 최신버전으로 업데이트 해주세요.

RESULT_DEVELOPER_ERROR

5

파라메터가 유효하지 않습니다.

The parameter is invalid.

원스토어에 문의해주세요.

RESULT_ERROR

6

정의되지 않은 기타 오류가 발생하였습니다.

An unknown error occurred.

원스토어에 문의해주세요.

Last updated