# 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 是為確保守全驗證而提供的PORT。呼叫授權結果 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           |
