> For the complete documentation index, see [llms.txt](https://onestore-dev.gitbook.io/dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://onestore-dev.gitbook.io/dev/chi/tools/alc/add-alc-library-dependency.md).

# 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           |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://onestore-dev.gitbook.io/dev/chi/tools/alc/add-alc-library-dependency.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
