Classic/VPC 환경에서 이용 가능합니다.
결제
GAMEPOT SDK에서 제공하는 인앱 결제 기능을 사용하여 게임 내 아이템을 판매할 수 있습니다. 결제 전에 스토어별 환경 설정에 해당 스토어에 맞도록 설정해야 합니다. 또한, 대시보드 > 결제 > 인앱에 아이템이 추가되지 않았을 경우 'ProductID not found' 라는 오류가 발생됩니다.
Android
(AOS) 인앱 정보 가져오기
결제하실 때에 화면에 결제 정보와 현지 통화 정보를 표시해야 합니다. 아래 함수를 통해서 현재 결제 통화나 이름 등을 가져올 수 있습니다. 만일 정상적으로 가져오지 못하는 경우 콘솔 세팅을 확인해 주시기 바랍니다.
Kotlin:
import com.nbase.sdk.Store
NBase.getProductItems() {products, e ->
if (e != null) {
Log.e("NBase", e.message)
} else {
// 인앱 아이템 정보
Log.e("NBase", products)
}
}
Java:
NBase nBase = NBase.INSTANCE;
nBase.getProductItems((products, e) -> {
if (e != null) {
Log.e("NBase", "getProductItems fail: " + e.getMessage());
} else {
if (products != null) {
Log.e("NBase", "getProductItems success: " + products.toString());
}
}
return null;
});
- Callback
| Key | Type | Description |
|---|---|---|
| id | String | 제품 ID |
| productName | String | 제품 이름 |
| title | String | 제품 타이틀 |
| price | Float | 제품 가격 |
| localizedPrice | Float | 현지화된 가격 |
| productId | String | 제품 고유 ID |
| productType | String | 제품 타입 |
| productDescription | String | 제품 설명 |
| currency | String | 통화 단위 |
(AOS) 결제 요청
가져온 인앱 정보에 productId 로 결제를 요청하실 수 있습니다.
Kotlin:
import com.nbase.sdk.Store
NBase.purchase(activity, Store.GOOGLE, productId, metadata, options) { purchase, e ->
if (e != null) {
Log.e("NBase", e.message)
} else {
Log.e("NBase", purchase)
}
}
Java:
import com.nbase.sdk.Store;
NBase nBase = NBase.INSTANCE;
nBase.purchase(activity, storeId, productId, metadata, options, (purchase, e) -> {
if (e != null) {
Log.e("NBase", "purchase fail: " + e.getMessage());
} else {
if (purchase != null) {
Log.e("NBase", "purchase success: " + purchase.toString());
}
}
return null;
});
- Parameter
| Key | Type | Description | Required |
|---|---|---|---|
| activity | Activity | 현재 액티비티 | O |
| storeId | Store | 스토어 ID (아래 표 참고) | O |
| productId | String | 상품ID (대시보드 → 결제 → 인앱 아이템) | O |
| metadata | String | 메타데이터 | X |
| options | String | 결제 옵션 기능 | X |
| Key | Description |
|---|---|
| Store.GOOGLE | 구글 스토어 |
| Store.ONE | 원 스토어 |
| Store.GALAXY | 갤럭시 스토어 |
| Store.AMAZON | 아마존 스토어 |
| Store.HUAWEI | 화웨이 스토어 |
- Callback
| Key | Type | Description |
|---|---|---|
| id | String | ID |
| orderId | String | 주문 ID |
| storeId | String | 스토어 ID |
| productId | String | 상품 ID |
| billingKey | String | 결제 키 |
| signature | String | 서명 |
| originalJson | String | 원본 JSON |
| developerPayload | String | 개발자 페이로드 |
| packageName | String | 패키지명 |
| isAcknowledged | bool | 확인 여부 |
| purchaseState | String | 구매 상태 |
| purchaseTime | String | 구매 시간 |
| quantity | String | 수량 |
| recurringState | String | 반복 결제 상태 |
| currency | String | 통화 |
| country | String | 국가 |
| paymentId | String | 결제 ID |
| price | Float | 가격 |
| iapVersion | String | 인앱결제 버전 |
| playerId | String | 플레이어 ID |
| serverId | String | 서버 ID |
| level | Int | 레벨 |
| userdata | String | 사용자 데이터 |
| metadata | String | 메타데이터 |
| options | String | 옵션 |
| authCode | String | 인증 코드 |
iOS
(iOS) 인앱 정보 가져오기
결제하실 때에 화면에 결제 정보와 현지 통화 정보를 표시해야 합니다. 아래 함수를 통해서 현재 결제 통화나 이름 등을 가져올 수 있습니다. 만일 정상적으로 가져오지 못하는 경우 콘솔 세팅을 확인해 주시기 바랍니다.
Swift:
let products = NBase.getProductItems()
Objective-C:
[NBaseBridge.shared getProductItems:^(NSString * _Nullable result) {
NSLog(@"getProductItems result: %@", result);
}];
- Callback
| Key | Type | Description |
|---|---|---|
| id | String | 제품 ID |
| productId | String | 제품 고유 ID |
| productName | String | 제품 이름 |
| productType | String | 제품 타입 |
| currency | String | 통화 |
| price | Float64 | 제품 가격 |
| localizedPrice | String | 현지화된 가격 |
| productDescription | String | 제품 설명 |
(iOS) 결제 요청
가져온 인앱 정보에 productId 로 결제를 요청하실 수 있습니다.
Swift:
NBase.purchase(productId: productId, metadata: metadata, options: options) { result in
switch result {
case .success(let data):
NBase.showToast(message: data?.encodeToJson() ?? "")
case .failure(let error):
NBase.showToast(message: error.errorDescription ?? "")
}
}
Objective-C:
[NBaseBridge.shared purchase:productId metadata:metadata options:options :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
if (error) {
NSLog(@"purchase Error: %@", error.localizedDescription);
} else {
NSLog(@"purchase succeeded with result: %@", result);
}
}];
- Parameter
| Key | Type | Description | Required |
|---|---|---|---|
| productId | String | 상품 ID (대시보드 > 결제 > 인앱 아이템) | O |
| metadata | String | 메타데이터 | X |
| options | String | 결제 옵션 기능 | X |
- Callback
| Key | Type | Description |
|---|---|---|
| orderId | String | 주문 ID |
| receipt | String | 영수증 |
| signature | String | 서명 |
| productId | String | 상품 ID |
| storeId | String | 스토어 ID |
| country | String | 국가 |
| quantity | Int | 수량 |
| paymentId | String | 결제 ID |
| currency | String | 통화 |
| serverId | String | 서버 ID |
| playerId | String | 플레이어 ID |
| userdata | String | 사용자 데이터 |
| metadata | String | 메타데이터 |
| options | String | 결제 옵션 |
| authCode | String | 인증 코드 |
| level | Int | 레벨 |
| price | Float64 | 가격 |
Unity
(Unity) 인앱 정보 가져오기
결제하실 때에 화면에 결제 정보와 현지 통화 정보를 표시해야 합니다.
아래 함수를 통해서 현재 결제 통화나 이름 등을 가져올 수 있습니다. 만일 정상적으로 가져오지 못하는 경우 콘솔 세팅을 확인해 주시기 바랍니다.
NBaseSDK.NBase.getProductItems(Store.google.ToString(), (products, error) =>
{
if (products != null && products.Count > 0)
{
// 제품 목록을 순회합니다.
foreach (var product in products)
{
// 각 제품의 정보를 토스트 메시지로 보여줍니다.
// 예시에서는 product.ToString()을 호출하고 있지만,
// 실제로는 product의 구체적인 속성(예: 이름, 가격 등)을 표시할 수 있습니다.
NBaseSDK.NBase.showToast(product.ToString());
}
}
else
{
// 제품 목록이 비어있는 경우, 사용자에게 알립니다.
NBaseSDK.NBase.showToast("제품 목록이 비어있습니다.");
}
});
- Callback
| Key | Type | Description |
|---|---|---|
| Products[].id | string | 제품 ID |
| Products[].title | string | 제품 타이틀 |
| Products[].productId | string | 제품 고유 ID |
| Products[].productType | string | 제품 타입 |
| Products[].productName | string | 제품 이름 |
| Products[].productDescription | string | 제품 설명 |
| Products[].currency | string | 통화 단위 |
| Products[].price | float | 제품 가격 |
(Unity) 결제 요청
가져온 인앱 정보에 productId 로 결제를 요청할 수 있습니다.
NBaseSDK.NBase.purchase(Store.google.ToString(), productId, metadata, options, (purchase, error) =>
{
if (error != null)
{
Debug.Log(error.Message.ToString());
return;
}
// 결제 성공
});
- Parameter
| Key | Type | Description | Required |
|---|---|---|---|
| storeId | string | 스토어 ID (아래 표 참고) | O |
| productId | string | 상품ID (대시보드 → 결제 → 인앱 아이템) | O |
| metadata | string | Metadata | X |
| options | string | 결제 옵션 기능 | X |
| Key | Description |
|---|---|
| Store.google.ToString() | 구글 스토어 |
| Store.one.ToString() | 원 스토어 |
| Store.galaxy.ToString() | 갤럭시 스토어 |
| Store.amazon.ToString() | 아마존 스토어 |
| Store.huawei.ToString() | 화웨이 스토어 |
- Callback
| Key | Type | Description |
|---|---|---|
| storeId | string | 상점의 고유 ID |
| paymentId | string | 결제 ID |
| iapVersion | string | 인앱 결제 버전 |
| productId | string | 제품 ID |
| billingKey | string | 청구 키 |
| signature | string | 서명 |
| originalJson | string | 원본 JSON |
| orderId | string | 주문 ID |
| developerPayload | string | 개발자 페이로드 |
| packageName | string | 패키지 이름 |
| isAcknowledged | bool | 확인 여부 |
| purchaseState | int | 구매 상태 |
| purchaseTime | long | 구매 시간 |
| price | float | 가격 |
| quantity | int | 수량 |
| currency | string | 통화 단위 |
문제 해결
Q. ProductID not found 오류가 발생합니다.
A. 대시보드 > 결제 > 인앱에 해당 상품 ID가 등록되어 있는지 확인해 주십시오.
Q. 결제가 진행되지 않습니다.
A. 스토어별 환경 설정을 참고하여 해당 스토어에 맞는 설정이 완료되었는지 확인해 주십시오.
Q. (Android) java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/billingclient/api/BillingClient;
A. 아래 코드를 추가해 주십시오.
<androidPackage spec="com.android.billingclient:billing:6.1.0" />
Q. (iOS) 인앱 정보를 가져올 수 없습니다.
A. Apple Connect에 등록된 인앱 상품 정보와 앱 환경(Production/Sandbox)이 일치하는지 확인해 주십시오.