# Add ALC library dependency

### 添加 ALC Library 从属项目 <a href="#alcapplicationlicensecheckerv2-ying-yong-tian-jia-alclibrary-cong-shu-xiang-mu" id="alcapplicationlicensecheckerv2-ying-yong-tian-jia-alclibrary-cong-shu-xiang-mu"></a>

项目顶端 build.gradle 文件中，注册 ONE store maven 地址。

Android Studio (version: bumblebee) 中添加 settings.gradle

hljs.highlightAll();

```gradle

...

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

```

<br>

下面应用软件的 build.gradle 文件中，添加 ONE store ALC Library从属项目

hljs.highlightAll();

```gradle

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

```

### AndroidManifest.xml中添加queries <a href="#alcapplicationlicensecheckerv2-ying-yong-androidmanifest.xml-zhong-tian-jia-queries" id="alcapplicationlicensecheckerv2-ying-yong-androidmanifest.xml-zhong-tian-jia-queries"></a>

以下两种情况，请参考ONE store 公告进行设置。

* [Target SDK 版本设置为 30(OS 11) 以上](https://dev.onestore.co.kr/devpoc/support/news/noticeView.omp?pageNo=4\&noticeId=32968\&viewPageNo=\&searchValue=)
* [Target SDK 版本设置为31(OS 12) 以上](https://dev.onestore.co.kr/devpoc/support/news/noticeView.omp?pageNo=1\&noticeId=33072\&viewPageNo=\&searchValue=)

<br>

Android 11 以上 (Target SDK 30 以上) ，请添加 queries。

hljs.highlightAll();

```xml

<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 <a href="#alcapplicationlicensecheckerv2-ying-yong-wei-onestorelogin-tian-jia-configuration" id="alcapplicationlicensecheckerv2-ying-yong-wei-onestorelogin-tian-jia-configuration"></a>

项目顶端build.gradle 文件中注册 maven 地址&#x20;

添加ALC Library从属项目时，流程同上。

hljs.highlightAll();

```gradle

...

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

```

下面应用软件的 build.gradle 文件中，添加 添加 ONE store configuration Library从属项目。

hljs.highlightAll();

```gradle

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

 
```

<br>

### AppLicenseChecker 初始化 <a href="#alcapplicationlicensecheckerv2-ying-yong-applicensechecker-chu-shi-hua" id="alcapplicationlicensecheckerv2-ying-yong-applicensechecker-chu-shi-hua"></a>

使用Application License Checke 要求用户的购买许可证，需生成AppLicenseChecker的 instance。\
必须通过开发者中心颁发的许可证密钥来验证许可证。 此外，是否拥有有效许可证的结果是通过 LicenseCheckerListener 传递的，初始化时需创建Listener。

**保存许可证密钥**

为了安全起见， 建议通过服务器接收许可证密钥并使用，而不是保存在应用程序内代码。

{% tabs %}
{% tab title="Kotlin" %}

```java
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) {}
}
```

{% endtab %}

{% tab title="Java" %}

```java
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	...
	appLicenseChecker = AppLicenseChecker.get(MainActivity.this, getString(R.string.publick_key, new AppLicenseListener());
}

...
private class AppLicenseListener implements LicenseCheckerListener {
	@Override
	public void granted(String license, String signature) {}

 	@Override
	public void denied() {}  
	
	@Override
	public void error(int code, String message) {}
} 
```

{% endtab %}
{% endtabs %}

### Callback 注册 <a href="#alcapplicationlicensecheckerv2-ying-yong-callback-zhu-ce" id="alcapplicationlicensecheckerv2-ying-yong-callback-zhu-ce"></a>

AppLicenseChecker 初始化时，必须注册 LicenseCheckerListener\
LicenseCheckeerListener 是为确认许可验证而提供的接口。许可验证结果调用 LicenseCheckeerListener 方法之一。\
granted()、denied() 、error()三种方法，可进行简单的结果处理。 error() 类型传递错误代码和消息。 有关错误代码，请参考下面的响应代码。

{% tabs %}
{% tab title="Kotlin" %}

```java
class AppLicenseListener : LicenseCheckerListener {
	override fun granted(license: String, signature: String) {
		// 许可证验证成功
  }

	override fun denied() {
		// 许可证验证失败
	}  
	
	override fun error(code: Int, message: String) {
		// 许可证验证出错
	}
} 
```

{% endtab %}

{% tab title="Java" %}

```java
class AppLicenseListener implements LicenseCheckerListener {
	@Override
	public void granted(String license, String signature) {
		// 许可证验证成功
	}

 	@Override
	public void denied() {
		// 许可证验证失败
	}  
	
	@Override
	public void error(int code, String message) {
		// 许可证验证出错
	}
} 
```

{% endtab %}
{% endtabs %}

### 许可证验证请求 <a href="#alcapplicationlicensecheckerv2-ying-yong-xu-ke-zheng-yan-zheng-qing-qiu" id="alcapplicationlicensecheckerv2-ying-yong-xu-ke-zheng-yan-zheng-qing-qiu"></a>

调用许可证验证时，通过与 ONE store 服务器的通信传递许可证。用户因网络故障或飞行模式等原因无法正常访问ONE store服务器时，一般采使用缓存策略，保证缓存License有效期内应用软件的正常运行。 如果不想使用缓存策略，可通过 **strictQueryLicense API** 不使用缓存的许可证。

#### QueryLicense API (Cached API) 调用 <a href="#alcapplicationlicensecheckerv2-ying-yong-querylicenseapicachedapi-tiao-yong" id="alcapplicationlicensecheckerv2-ying-yong-querylicenseapicachedapi-tiao-yong"></a>

协同缓存策略操作。 一般情况下，通过ONE store服务器接收用户购买历史的License，但因网络故障或飞行模式等原因无法访问ONE store服务器时，使用本地缓存的License来保证有效期内的正常运行。

{% tabs %}
{% tab title="Kotlin" %}

```java
appLicenseChecker.queryLicense()
```

{% endtab %}

{% tab title="Java" %}

```java
appLicenseChecker.queryLicense();
```

{% endtab %}
{% endtabs %}

#### StrictQueryLicense API (Non-Cached API) 调用 <a href="#alcapplicationlicensecheckerv2-ying-yong-strictquerylicenseapinoncachedapi-tiao-yong" id="alcapplicationlicensecheckerv2-ying-yong-strictquerylicenseapinoncachedapi-tiao-yong"></a>

不使用缓存的许可证。 如果在网络故障或飞行模式下使用该 API， 因为无法访问 ONE store 服务器，用户无法使用应用程序 。

{% tabs %}
{% tab title="Kotlin" %}

```java
appLicenseChecker.strictQueryLicense()
```

{% endtab %}

{% tab title="Java" %}

```java
appLicenseChecker.strictQueryLicense();
```

{% endtab %}
{% endtabs %}

### 断开连接 <a href="#alcapplicationlicensecheckerv2-ying-yong-duan-kai-lian-jie" id="alcapplicationlicensecheckerv2-ying-yong-duan-kai-lian-jie"></a>

建议通过调用AppLicenseChecker的destroy函数，断开ONE store服务。

{% tabs %}
{% tab title="Kotlin" %}

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

{% endtab %}

{% tab title="Java" %}

```java
@Override
protected void onDestroy() {
	if (null != appLicenseChecker) {
		appLicenseChecker.destroy();
	}
	
	super.onDestory();
} 
```

{% endtab %}
{% endtabs %}

#### 响应代码 <a href="#alcapplicationlicensecheckerv2-ying-yong-xiang-ying-dai-ma" id="alcapplicationlicensecheckerv2-ying-yong-xiang-ying-dai-ma"></a>

下表是从 ONE store ALC Library传递到应用程序的Error响应代码和消息。 使用Library的应用程序必须处理响应代码。

| Response Code                  | Value | Description(KR)                           | Description(CN)                      | How to handle Solutions |
| ------------------------------ | ----- | ----------------------------------------- | ------------------------------------ | ----------------------- |
| RESULT\_OK                     | 0     | 성공                                        | 成功                                   | <p><br></p>             |
| ERROR\_CLIENT\_NOT\_ENABLED    | 1010  | 원스토어에 연결할 수 없습니다. 원스토어 앱 실행이 필요합니다.       | 无法连接到 ONE store。 需要运行 ONE store应用程序。 | <p><br></p>             |
| ERROR\_SERVICE\_UNAVAILABLE    | 2000  | 서비스를 이용할 수 없는 상태입니다.                      | 服务不可用                                | 请咨询 ONE store           |
| ERROR\_DATA\_PARSING           | 2001  | 파라메터가 유효하지 않습니다.                          | 参数无效                                 | 请咨询 ONE store           |
| ERROR\_SIGNATURE\_VERIFICATION | 2002  | 라이선스 키가 맞지 않거나 구매 내역이 없는 유저 입니다.          | 许可证密钥不匹配或用户没有购买历史记录                  | 请在ONE store开发者中心确认许可证密钥 |
| ERROR\_SERVICE\_TIMEOUT        | 2100  | 서비스 응답이 없습니다.                             | 服务未响应                                | 请检查 网络状态                |
| ERROR\_USER\_LOGIN\_CANCELD    | 2101  | 사용자가 로그인을 취소하였습니다.                        | 用户取消登录                               | 请登录ONE store            |
| ERROR\_INSTALL\_USER\_CANCELED | 2103  | 원스토어 서비스 설치를 취소하였습니다.                     | 已取消安装 ONE store 服务                   | 请登录ONE store            |
| ERROR\_NOT\_FOREGROUND         | 2104  | 백그라운드 서비스에서는 진행할 수 없습니다.                  | 后台服务 无法运行                            | <p><br></p>             |
| RESULT\_UNKNOWN                | -1    | 알 수 없는 오류가 발생하였습니다.                       | 出现未知错误                               | 请咨询 ONE store           |
| RESULT\_USER\_CANCELED         | 1     | 사용자가 로그인을 취소하였습니다.                        | 用户取消登录.                              | 请咨询 ONE store           |
| RESULT\_SERVICE\_UNAVAILABLE   | 2     | 단말 또는 서버 네트워크 오류가 발생하였습니다.                | 终端或服务器网络出错                           | 请检查 网络状态.               |
| RESULT\_ALC\_UNAVAILABLE       | 3     | ALC api 버전 정보가 낮습니다. 해당 라이브러리를 업데이트 해주세요. | ALC api 版本过低。 请更新Library             | 请将ALC Library 更新到最新版本。  |
| RESULT\_DEVELOPER\_ERROR       | 5     | 파라메터가 유효하지 않습니다.                          | 参数无效                                 | 请咨询 ONE store           |
| RESULT\_ERROR                  | 6     | 정의되지 않은 기타 오류가 발생하였습니다.                   | 发生了其他未定义的错误                          | 请咨询 ONE store           |
