# PurchaseClient

```java
public abstract class BillingClient extends Object

java.lang.Object
    ↳ com.gaa.sdk.iap.PurchaseClient
```

라이브러리와 사용자 어플리케이션 코드 간의 통신을 위한 기본 인터페이스 입니다.

모든 메서드는 비동기로 처리되며 UI thread에서 호출되어야 하며 모든 콜백은 UI thread로 반환됩니다.

이 클래스를 인스턴스화한 후 연결 설정을 하려면 `startConnection(`[`[I]PurchaseClientStateListener`](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/purchaseclientstatelistener)`)` 메서드를 호출하고 설정이 완료되면 리스너를 통해 알림을 받을 수 있습니다.

```java
class YourPurchaseManager implements PurchaseClientStateListener {
    private PurchaseClient mPurchaseClient;
 
    public YourPurchaseManager() {
        mPurchaseClient = PurchaseClient.newBuilder(activity)
            .setBase64PublicKey(/* your public key */)
            .setListener(this)
            .build();
    }
 ...
}
```

\
일반적으로 설정이 완료되면 구매내역 조회와 인앱 상품의 상세정보를 호출합니다. `queryPurchasesAsync(String,` [`QueryPurchasesListener`](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/querypurchaseslistener)`)` 및 `queryProductDetailsAsync(`[`ProductDetailsParams`](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/classes/productdetailsparams)`,` [`ProductDetailsListener`](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/productdetailslistener)`)` 참조하세요.

이 객체로 모든 작업을 마치고 어플리케이션을 종료할 때는 `endConnection()`의 호출을 잊지마십시오. 결제 모듈과의 연결해제 및 자원을 해제해야 합니다. 권장 위치는 `Activity.onDestroy()` 입니다.

라이브러리의 자세한 로그를 확인하려면 `Logger.setLogLevel(int)` 에 `android.util.Log.VERBOSE` 입력하여 호출하면 됩니다.

{% hint style="danger" %}
&#x20;어플리케이션의 릴리즈 버전을 출시 전에 꼭! `Logger.setLogLevel(int)`를 제거 하십시오.
{% endhint %}

## Summary <a href="#id-c-purchaseclient-summary" id="id-c-purchaseclient-summary"></a>

***

| Nested classes |                                                                                                                                               |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| @interface     | [PurchaseClient.ConnectionState](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.connectionstate) |
| @interface     | [PurchaseClient.ResponseCode](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.responsecode)       |
| @interface     | [PurchaseClient.ProductType](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.producttype)         |
| @interface     | [PurchaseClient.RecurringAction](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.recurringaction) |
| @interface     | [PurchaseClient.FeatureType](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.featuretype)         |
| class          | <p><a href="purchaseclient.builder">PurchaseClient.Builder</a></p><p>PurchaseClient 인스턴스를 쉽게 만들기 위한 빌더입니다.</p>                                |

## Public methods <a href="#id-c-purchaseclient-publicmethods" id="id-c-purchaseclient-publicmethods"></a>

***

### newBuilder <a href="#id-c-purchaseclient-newbuilder" id="id-c-purchaseclient-newbuilder"></a>

```
@AnyThread
public static  newBuilder(Context context)
```

PurchaseClient의 인스턴스를 만들기 위한 빌더를 생성합니다.

| **Parameters:**                                                                                                           |                                              |
| ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| context                                                                                                                   | applicationContext를 사용하여 결제모듈과 연결을 위해 사용됩니다. |
| Returns:                                                                                                                  |                                              |
| [PurchaseClient.Builder](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/classes/purchaseclient.builder) |                                              |

### isReady <a href="#id-c-purchaseclient-isready" id="id-c-purchaseclient-isready"></a>

```
@AnyThread
public abstract boolean isReady()
```

클라이언트가 현재 서비스에 연결되어 있는지 확인하여 다른 함수에 대한 요청이 성공하는지 확인합니다.

| Returns: |
| -------- |
| boolean  |

### getConnectionState <a href="#id-c-purchaseclient-getconnectionstate" id="id-c-purchaseclient-getconnectionstate"></a>

```
@AnyThread
public abstract int getConnectionState()
```

현재 PurchaseClient 의 연결상태를 반환합니다.

| Returns: |                                                                                                                                                            |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| int      | [PurchaseClient.ConnectionState](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.connectionstate) 에 해당하는 상태 값. |

### isFeatureSupported <a href="#id-c-purchaseclient-isfeaturesupported" id="id-c-purchaseclient-isfeaturesupported"></a>

```
@UiThread
public abstract [C]IapResult isFeatureSupported(String feature)
```

지정한  기능이 서비스에서 지원 되는지 확인합니다.

| **Parameters:** |                                                                                                                                                    |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| String          | [PurchaseClient.FeatureType](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.featuretype) 상수 중 하나 입니다. |
| **Returns:**    |                                                                                                                                                    |
| IapResult       | <p>기능이 지원되는 경우 PurchaseClient.ResponseCode.RESULT\_OK<br>그렇지 않을 경우 PurchaseClient.ResponseCode.ERROR\_FEATURE\_NOT\_SUPPORTED</p>                  |

### startConnection <a href="#id-c-purchaseclient-startconnection" id="id-c-purchaseclient-startconnection"></a>

```
@AnyThread
public abstract void startConnection([I]PurchaseClientStateListener listener)
```

PurchaseClient 설정 프로세스를 비동기적으로 시작합니다.\
완료되면 [\[I\]PurchaseClientStateListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/purchaseclientstatelistener)를 통해 응답 받습니다.

| **Parameters:** |                                                |
| --------------- | ---------------------------------------------- |
| listener        | PurchaseClient 설정과 결제모듈 연결이 완료 되었을 때 응답을 받습니다. |

### endConnection <a href="#id-c-purchaseclient-endconnection" id="id-c-purchaseclient-endconnection"></a>

```
@AnyThread
public abstract void endConnection()
```

결제 모듈과의 연결을 끊고 PurchaseClient의 보유 자원을 해제 합니다.

### launchUpdateOrInstallFlow <a href="#id-c-purchaseclient-launchupdateorinstallflow" id="id-c-purchaseclient-launchupdateorinstallflow"></a>

```
@UiThread
public abstract void launchUpdateOrInstallFlow(Activity activity, [I]IapResultListener listener)
```

IapResult.getResponseCode()의 값이 PurchaseClient.ResponseCode.RESULT\_NEED\_UPDATE가 발생했을 때\
결제 모듈의 업데이트 또는 설치를 위해 호출해야 합니다.

| **Parameters:** |                                                                                                                         |
| --------------- | ----------------------------------------------------------------------------------------------------------------------- |
| activity        | Activity: 결제 모듈의 업데이트 또는 설치의 흐름 알기위해 activity를 참조합니다.                                                                   |
| listener        | [\[I\]IapResultListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/iapresultlistener) |

### launchPurchaseFlow <a href="#id-c-purchaseclient-launchpurchaseflow" id="id-c-purchaseclient-launchpurchaseflow"></a>

```
@UiThread
public abstract [C]IapResult launchPurchaseFlow(Activity activity, [C]PurchaseFlowParams params)
```

인앱 상품 구매를 시작합니다.\
구매화면이 표시되고 결과를 PurchaseClient 를 초기화할 때 지정했던 [\[I\]PurchasesUpdatedListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/purchasesupdatedlistener)를 통해 응답 받습니다.

| **Parameters:**      |                                          |
| -------------------- | ---------------------------------------- |
| activity             | Activity: 구매화면을 띄우기 위해 activity를 참조합니다.  |
| params               | PurchaseFlowParams 구매화면을 띄우기 위한 매개변수입니다. |
| **Returns:**         |                                          |
| <p>IapResult<br></p> |                                          |

### consumeAsync <a href="#id-c-purchaseclient-consumeasync" id="id-c-purchaseclient-consumeasync"></a>

```
@AnyThread
public abstract void consumeAsync(params, listener)
```

구매한 상품을 소비 합니다.\
소유된 상품만 수행할 수 있으며, 소비를 진행했던 상품의 경우 다시 구매를 진행해야 합니다.\
경고! API v6 부터는 구매 후 3일 이내에 소비(consume) 또는 확인(acknowledge)을 하지 않으면 환불됩니다.

| **Parameters:** |                                                                                                                                    |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| params          | [ConsumeParams](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/classes/consumeparams) 소비를 위한 매개변수입니다.            |
| listener        | [ConsumeListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/consumelistener) 소비 작업의 결과를 전달 받습니다. |

### acknowledgeAsync <a href="#id-c-purchaseclient-acknowledgeasync" id="id-c-purchaseclient-acknowledgeasync"></a>

```
@AnyThread
public abstract void acknowledgeAsync(acknowledgeParams, listener)
```

구매한 상품을 확인 합니다.\
소유된 상품만 수행할 수 있으며, 확인을 했던 상품은 소비를 하지 않으면 재구매를 할 수 없습니다.\
관리형 상품 또는 월정액 상품에 모두 적용가능 합니다.\
특히 관리형 상품의 경우 확인(acknowledge)를 하고 일정 기간후에 소비(consume)을 진행하는 기간제 상품으로 활용할 수 있습니다.\
경고! API v6 부터는 구매 후 3일 이내에 소비(consume) 또는 확인(acknowledge)을 하지 않으면 환불됩니다.

| **Parameters:**   |                                                                                                                                               |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| acknowledgeParams | [AcknowledgeParams](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/classes/acknowledgeparams) 구매 확인을 위한 매개변수입니다.            |
| listener          | [AcknowledgeListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/acknowledgelistener) 구매 확인 작업의 결과를 전달 받습니다. |

### queryPurchasesAsync <a href="#id-c-purchaseclient-querypurchasesasync" id="id-c-purchaseclient-querypurchasesasync"></a>

```
@AnyThread
public abstract void queryPurchasesAsync(String productType,  listener)
```

앱에서 구매한 모든 상품에 대한 구매정보를 가져옵니다.

| **Parameters:** |                                                                                                                                                      |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| productType     | [PurchaseClient.ProductType](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/annotations/purchaseclient.producttype) 상품의 타입을 지정합니다. |
| listener        | [QueryPurchasesListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/querypurchaseslistener) 구매내역에 대한 결과를 전달 받습니다.   |

### queryProductDetailsAsync <a href="#id-c-purchaseclient-queryproductdetailsasync" id="id-c-purchaseclient-queryproductdetailsasync"></a>

```
@AnyThread
public abstract void queryProductDetailsAsync(params, listener)
```

개발자 센터에 등록한 인앱상품의 상세정보를 가져옵니다.

| **Parameters:** |                                                                                                                                                       |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| params          | [ProductDetailsParams](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/classes/productdetailsparams) 상품 상세정보를 가져오기 위한 매개변수입니다.       |
| listener        | [ProductDetailsListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/productdetailslistener) 상품 상세정보에 대한 결과를 전달 받습니다. |

### manageRecurringProductAsync <a href="#id-c-purchaseclient-managerecurringproductasync" id="id-c-purchaseclient-managerecurringproductasync"></a>

```
@AnyThread
public abstract void manageRecurringProductAsync(recurringProductParams, listener)
```

월정액 상품의 상태를 변경 합니다.\
매월 자동결제를 취소 하거나 취소한 자동결제를 다시 재개하는 동작을 진행합니다.

| **Parameters:**        |                                                                                                                                                                |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| recurringProductParams | [RecurringProductParams](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/classes/recurringproductparams) 월정액 상품 상태 변경을 위한 매개변수입니다.            |
| listener               | [RecurringProductListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/recurringproductlistener) 월정액 상품 상태 변경에 대한 결과를 전달 받습니다. |

### launchLoginFlowAsync <a href="#id-c-purchaseclient-launchloginflowasync" id="id-c-purchaseclient-launchloginflowasync"></a>

```
@UiThread
public abstract void launchLoginFlowAsync(Activity activity, [I]IapResultListener listener)
```

IapResult.getResponseCode()의 값이 PurchaseClient.ResponseCode.RESULT\_NEED\_LOGIN가 발생했을 때 스토어 로그인을 진행합니다.

| **Parameters:** |                                                                                                                                                |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| activity        | Activity: 스토어 로그인의 흐름 알기위해 activity를 참조합니다.                                                                                                    |
| listener        | [IapResultListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/iapresultlistener) 로그인 성공, 실패에 대한 결과를 전달 받습니다. |

### launchManageSubscription <a href="#id-c-purchaseclient-launchmanagesubscription" id="id-c-purchaseclient-launchmanagesubscription"></a>

```
@UiThread
public abstract void launchManageSubscription(Activity activity, [C]SubscriptionParams subscriptionParams)
```

구독 상품 관리 메뉴로 이동합니다.

| **Parameters:**    |                                                                                                                        |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| activity           | Activity: 구독 상풍 관리 메뉴로 이동하기 위해 activity를 참조합니다.                                                                        |
| subscriptionParams | <p><a href="subscriptionparams">SubscriptionParams</a> null 일 경우 관리 메뉴 화면으로<br>PurchaseData 가 있을 경우 상세 화면으로 이동합니다.</p> |

### getStoreInfoAsync <a href="#id-c-purchaseclient-getstoreinfoasync" id="id-c-purchaseclient-getstoreinfoasync"></a>

```
@AnyThread
public abstract void getStoreInfoAsync(StoreInfoListener listener)
```

마켓 구분코드를 가져옵니다.\
이 값은 server to server API를 사용할 때 필요한 값 입니다.

| **Parameters:** |                                                                                                                                      |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| listener        | [StoreInfoListener](https://onestore-dev.gitbook.io/dev/tools/billing/v21/references/interfaces/storeinfolistener) 마켓 구분코드를 전달 받습니다. |
