Hive SDK v1.19.1부터 IAP v1의 지원을 종료합니다. Hive SDK v1.19.1 이상의 환경에서는 Hive IAP v4를 적용하시기 바랍니다.
본 가이드는 Hive IAP v1에 대해 안내하며, Hive SDK v1.19.0 이하 환경에서 적용하실 수 있습니다.
결제 방식 선택 팝업 조건 (GooglePlay-Lebi)
러비 구매 도식도
C2SModuleInapp_RequestBalance
- marketTarget이 “googleplay_lebi”이고 Hive에 로그인한 경우 Lebi의 잔액을 조회한다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
uid | string | lebi 잔액을 확인 할 사용자의 uid | Android |
Result – Api.Inapp_RequestBalance
- 요청한 uid의 러비 잔액 정보를 받는다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
uid | string | lebi 잔액을 확인 할 사용자의 uid | Android | |
value | int | lebi 잔액 | Android |
C2SModuleInapp_Prepare
- marketTarget이 “googleplay_lebi”일 경우 마켓을 다시 initialize 한다. (Google or Lebi)
- 다른 마켓일 경우 Code.NotSupported 에러
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
useStaging | bool | staging서버를 사용 할 지 여부 이나 ( false로 세팅 요망) | Android | |
pidList | string array | 구매에서 사용할 러비 product id의 리스트 처음에 등록해서 스토어를 통해 세부 정보를 받는다. |
Android | |
showLog | bool | 로그 활성화 여부 | Android | |
inappId | string | (option)package Name을 사용한다. | Android | |
autoVerify | bool | (option)Hive 서버에 모듈 서버 검증을 사용한다. Default : false |
Android |
Result – Api.Inapp_Prepare
- 러비 선택 팝업에서 Gooogle Play를 선택했을 경우
-
마켓을 Google Play로 선택했을 경우 Inapp_Prepare로 성공 콜백을 받고, Lebi 일 경우 Inapp_Description 으로 콜백을 받는다. 이 때 내용은 Lebi 마켓의 아이템 정보다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
showLog | bool | 로그 출력 여부 | Android | |
useStaging | bool | Staging 여부 | Android | |
list | array | 설정 값에 따른 array type for list | Android |
array type for list
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
argument 없음 | Android |
Result – Api.Inapp_Description
- 러비 선택 팝업에서 Lebi 마켓을 선택했을 경우
- 마켓을 Lebi로 선택했을 경우 Inapp_Description으로 콜백을 받는다. 이 때 내용은 Lebi 마켓의 아이템 정보다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
“list” | array | 설정값에 따라 array type for list 가 변경. | all |
array type for list
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
pid | string | product id | ||
formattedString | string | xxx (예: “₩1,000” ) | ||
localizedTitle | string | |||
localizedDescription | string | |||
currencyCode | string | 통화코드 – formattedString과 동일한 Code를 내려줌 ISO 4217 currency code (현재 Apple App Store, Google Play만 지원) |
iOS Android |
C2SModuleInapp_Restore
- 상품 구매 과정에서 여러가지 상황으로 인하여 아이템 지급을 실패하거나 취소되는 경우가 발생할 수 있다. 이런 상황을 대비하기 위해서는 미 지급된 아이템의 영수증 정보를 요청해야 한다.
- 이전에 완료(finish)되지 않은 구매를 복구하여 사용자에게 전달한다. 이전 구매 상태에 따라 통지가 없을 수 있다.
- 플레이스토어에서 프로모션 코드를 넣을 수 있는데, 게임이 종료된 상태에서도 과금이 가능하다. 이를 체크하기 위해서는 게임 초기화 후 필요한 특정 시점에
restore()
메서드를 호출해주면 된다. restore()
메서드를 호출한 결과 값이 SUCCESS가 아닌 경우 게임에서 처리하지 않아도 된다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
argument 없음 | all |
Result – Api.Inapp_Restore
- 복구한 아이템에 대한 정보를 받는다.
- Api.Inapp_Purchase와 같은 형식으로 데이터가 내려온다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
pid | string | product id | all | |
quantity | int | 수량 | all | |
receipt | map | 영수증 데이터 | all |
key-value for receipt
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
“APPLE_RECEIPT” | string | Apple | iOS | |
“TSTORE_TRANSACTION” | string | T store | Android | |
“OLLEHMARKET_TRANSACTIONID” | string | olleh market | Android | |
“OLLEHMARKET_DATELOCAL” | string | olleh market | Android | |
“OZSTORE_DATELOCAL” | string | oz store | Android | |
“THIRDPARTY_ORDERKEY” | string | third party (Google checkout) | Android | |
“QIIP_DATELOCAL” | string | qiip | Android | |
“HAMI_DATELOCAL” | string | hami | Android | |
“LEBI_BILLINGNUM” | string | Lebi | Android | |
“PLASMA_PAYMENTID” | string | samsung apps plasma | Android | |
“PLASMA_PURCHASEID” | string | samsung apps plasma | Android | |
“PLASMA_ITEMID” | string | samsung apps plasma | Android | |
“PLASMA_VERIFYURL” | string | samsung apps plasma | Android | |
“PLASMA_PARAM1” | string | samsung apps plasma | Android | |
“PLASMA_PARAM2” | string | samsung apps plasma | Android | |
“PLASMA_PARAM3” | string | samsung apps plasma | Android | |
“PLASMA_PURCHASEDATE” | string | samsung apps plasma | Android | |
“AMAZON_PRODUCTID” | string | amazon | Android | |
“AMAZON_USERID” | string | amazon | Android | |
“AMAZON_RECEIPTID” | string | amazon | Android | |
“AMAZON_REQUESTID” | string | amazon | Android | |
“AMAZON_MARKETPLACE” | string | amazon | Android | |
“KDDI_TRANSACTION” | string | kddi | Android | |
“KDDI_SIGNATURE” | string | kddi | Android | |
“MM_ORDERID” | string | mm | Android | |
“MM_PURCHASEDATE” | string | mm | Android | |
“MBIZ_EMONEY” | string | mbiz | Android | |
“MBIZ_PURCHASEDATE” | string | mbiz | Android | |
“GOOGLEPLAY_RECEIPT” | string | Android | ||
“GOOGLEPLAY_SIGNATURE” | string | Android |
C2SModuleInapp_Purchase
- 상품을 구매 한다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
pid | string | 구매 할 product id | all | |
quantity | int | 구매할 아이템 수량 구글 : managed = 0, 소모성 아이템 = 1 (현재는 managed로 등록한 아이템을 소모성 아이템으로 사용하고 있으므로 큰 의미가 없는 값) 아마존, 러비, 원스토어, … : 구매 요청 시 넣어준 quantity의 값 (현재 사용하지 않는 기능) |
all | |
addtionalInfo | string | (option) 게임서버가 여러 개일 경우 구매로그에 추가적인 정보가 필요할 경우 사용한다. 서버 구분의 경우 server_id라는 키로 jsonstring 형식으로 넣는다. 예){“server_id”:”some info”}서버 지역 코드값은 ‘ISO 3166 alpha-2’ 코드를 기준으로 하며 Hive 연동 가이드라인 게임서버 ID 항목을 참고한다. |
all |
Result – Api.Inapp_Purchase
- 구매한 아이템에 대한 정보를 받는다.
- Api.Inapp_Restore와 같은 형식으로 데이터가 내려온다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
pid | string | product id | all | |
quantity | int | 수량 구글 : managed = 0, 소모성 아이템 = 1 (현재는 managed로 등록한 아이템을 소모성 아이템으로 사용하고 있으므로 큰 의미가 없는 값) 아마존, 러비, 원스토어, … : 구매 요청 시 넣어준 quantity의 값 (현재 사용하지 않는 기능) |
all | |
receipt | map | 영수증 데이터 | all |
key-value for receipt
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
“APPLE_RECEIPT” | string | Apple | iOS | |
“TSTORE_TRANSACTION” | string | T store | Android | |
“OLLEHMARKET_TRANSACTIONID” | string | olleh market | Android | |
“OLLEHMARKET_DATELOCAL” | string | olleh market | Android | |
“OZSTORE_DATELOCAL” | string | oz store | Android | |
“THIRDPARTY_ORDERKEY” | string | third party (google checkout) | Android | |
“QIIP_DATELOCAL” | string | qiip | Android | |
“HAMI_DATELOCAL” | string | hami | Android | |
“LEBI_BILLINGNUM” | string | Lebi | Android | |
“PLASMA_PAYMENTID” | string | samsung apps plasma | Android | |
“PLASMA_PURCHASEID” | string | samsung apps plasma | Android | |
“PLASMA_ITEMID” | string | samsung apps plasma | Android | |
“PLASMA_VERIFYURL” | string | samsung apps plasma | Android | |
“PLASMA_PARAM1” | string | samsung apps plasma | Android | |
“PLASMA_PARAM2” | string | samsung apps plasma | Android | |
“PLASMA_PARAM3” | string | samsung apps plasma | Android | |
“PLASMA_PURCHASEDATE” | string | samsung apps plasma | Android | |
“AMAZON_PRODUCTID” | string | amazon | Android | |
“AMAZON_USERID” | string | amazon | Android | |
“AMAZON_RECEIPTID” | string | amazon | Android | |
“AMAZON_REQUESTID” | string | amazon | Android | |
“AMAZON_MARKETPLACE” | string | amazon | Android | |
“KDDI_TRANSACTION” | string | kddi | Android | |
“KDDI_SIGNATURE” | string | kddi | Android | |
“MM_ORDERID” | string | mm | Android | |
“MM_PURCHASEDATE” | string | mm | Android | |
“MBIZ_EMONEY” | string | mbiz | Android | |
“MBIZ_PURCHASEDATE” | string | mbiz | Android | |
“GOOGLEPLAY_RECEIPT” | string | Android | ||
“GOOGLEPLAY_SIGNATURE” | string | Android |
C2SModuleInapp_Finish
- 구매한 상품의 완료를 알린다.
- 과금 이벤트 트래킹을 위해 과금 성공 후 다음과 같이 Inapp Finish에 Argument를 추가하여야 한다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
isPurchaseSuccess | bool | isPurchaseSuccess 는 마케팅 트래킹 로그(PartyTrack, Adjust) 전송 여부를 나타낸다. 따라서 과금이 실제로 성공한 Finish일 경우에만 true로 설정한다. default : false. |
all | 1.7.1+ |
Result – Api.Inapp_Finish
- 구매한 상품이 완료 처리 되면 오는 콜백이다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
argument 없음 | all |
샘플 코드
public static bool C2SModule.Inapp.RequestBalance(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
– marketTarget이 “googleplay_lebi”일 경우 러비의 잔액을 요청한다.
(요청 하기 위해서는 Hive에 로그인 되어 있어야 한다.)
1 2 3 4 5 6 7 |
C2SModule.Parameter arg = new C2SModule.Parameter(); arg["uid"] = "12345678"; C2SModule.Error error; if(!C2SModule.Inapp.RequestBalance(arg, out error)) { // Error 시 처리 } |
public static bool C2SModule.Inapp.Prepare(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
– Hive 에서는 과금 방식을 2가지 이상 사용할 수 있도록 지원을 하는데 이 때 과금 방식이 Lebi 일 경우
사용하는 함수 (Initialize 시 inapp모듈의 margetTarget = “googleplay_lebi”)
Lebi 란 중국 본토 내에서 InApp 과금 처리를 위해 자사에서 만든 모듈로서 러비(Lebi)라는 단위의 화폐를 충전하여 사용하는 방식이다.
만약 Google Play 마켓의 과금 방식만을 사용하는 경우 Prepare 함수를 호출 할 필요가 없다.
1 2 3 4 5 6 7 8 |
C2SModule.Parameter arg = new C2SModule.Parameter(); arg["useStaging"] = false; arg["pidList"] = {"m1", "u1"}; C2SModule.Error error; if(!C2SModule.Inapp.Prepare(arg, out error)) { // Error 시 처리 } |
public static bool C2SModule.Inapp.Restore(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
– 이전에 finish 되지 않은 구매를 복구하여 사용자에게 전달. 이전 구매 상태에 따라 통지가 없을 수 있다.
1 2 3 4 5 |
C2SModule.Error error; if(!C2SModule.Inapp.Restore(null, out error)) { // Error 시 처리 } |
public static bool C2SModule.Inapp.Purchase(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
– 상품을 구매 한다.
1 2 3 4 5 6 7 |
C2SModule.Parameter arg = new C2SModule.Parameter(); arg["pid"] = "m1"; C2SModule.Error error; if(!C2SModule.Inapp.Purchase(arg, out error)) { // Error 시 처리 } |
public static bool C2SModule.Inapp.Finish(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
– 구매한 상품의 완료를 알린다.
1 2 3 4 5 6 |
C2SModule.Parameter arg = new C2SModule.Parameter(); C2SModule.Error error; if(!C2SModule.Inapp.Finish(arg, out error)) { // Error 시 처리 } |
– marketTarget이 “googleplay_lebi”일 경우 러비의 잔액을 요청한다.
(요청 하기 위해서는 Hive에 로그인 되어 있어야 한다.)
1 2 3 4 5 6 7 8 9 |
TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("uid"), "12345678"); // 자신의 uid를 입력합니다. FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUEInapp_RequestBalance(OutputString); |
– Hive 에서는 과금 방식을 2가지 이상 사용할 수 있도록 지원을 하는데 이 때 과금 방식이 Lebi 일 경우
사용하는 함수 (Initialize 시 inapp모듈의 margetTarget = “googleplay_lebi”)
Lebi 란 중국 본토 내에서 InApp 과금 처리를 위해 자사에서 만든 모듈로서 러비(Lebi)라는 단위의 화폐를 충전하여 사용하는 방식이다.
만약 Google Play 마켓의 과금 방식만을 사용하는 경우 Prepare 함수를 호출 할 필요가 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
TSharedPtr argInapp = MakeShareable(new FJsonObject); // 현재 테스트 서버는 운영하지 않으므로 실서버로 설정해주어야 합니다. argInapp->SetBoolField(TEXT("useStaging"), false); TArray<TSharedPtr> inappList; TSharedPtr Value; Value = MakeShareable(new FJsonValueString(TEXT("050301010001"))); inappList.Add(Value); argInapp->SetArrayField(TEXT("pidList"), inappList); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(argInapp.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUEInapp_Prepare(OutputString); |
– 이전에 finish 되지 않은 구매를 복구하여 사용자에게 전달. 이전 구매 상태에 따라 통지가 없을 수 있다.
1 2 |
FString empty; FHiveSDKModule::Get().HiveSDKUEInapp_Restore(empty); |
– 상품을 구매 한다.
1 2 3 4 5 6 7 8 9 10 |
TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("pid"), TEXT("m1")); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); UE_LOG(LogTemp, Warning, TEXT( " PurchaseTest :.. %s"), *OutputString); FHiveSDKModule::Get().HiveSDKUEInapp_Purchase(OutputString); |
– 구매한 상품의 완료를 알린다.
1 2 |
FString OutputString; FHiveSDKModule::Get().HiveSDKUEInapp_Finish(OutputString); |
pkError, C2SModule_Cocos2dx::C2SModuleCompletionHandler* completionHandler = NULL);
– marketTarget이 “googleplay_lebi”일 경우 러비의 잔액을 요청한다.
(요청 하기 위해서는 Hive에 로그인 되어 있어야 한다.)
1 2 3 4 5 6 7 8 9 |
Json::Value arg; arg["uid"] = "12345678"; // 자신의 uid를 입력합니다. Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleInapp_RequestBalance( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> requestBalance error (%s)", error.get()->GetMessage() ); } |
C2SModule_Cocos2dx::C2SModuleCompletionHandler* completionHandler = NULL);
– Hive 에서는 과금 방식을 2가지 이상 사용할 수 있도록 지원을 하는데 이 때 과금 방식이 Lebi 일 경우
사용하는 함수 (Initialize 시 inapp모듈의 margetTarget = “googleplay_lebi”)
Lebi 란 중국 본토 내에서 InApp 과금 처리를 위해 자사에서 만든 모듈로서 러비(Lebi)라는 단위의 화폐를 충전하여 사용하는 방식이다.
만약 Google Play 마켓의 과금 방식만을 사용하는 경우 Prepare 함수를 호출 할 필요가 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Json::Value argInapp; argInapp ["useStaging"] = false; // 현재 테스트 서버는 운영하지 않으므로 실서버로 설정해주어야 합니다. Json::Value inappList; inappList.append("050301010001"); // Lebi 과금 코드 argInapp ["pidList"] = inappList; Json::StyledWriter writer; std::string strJSON = writer.write(argInapp); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleInapp_Prepare( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Prepare error (%s)", error.get()->GetMessage() ); } |
C2SModule_Cocos2dx::C2SModuleCompletionHandler* completionHandler = NULL);
– 이전에 finish 되지 않은 구매를 복구하여 사용자에게 전달. 이전 구매 상태에 따라 통지가 없을 수 있다.
1 2 3 4 |
C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleInapp_Restore( (char*)NULL, &error) == false ) { CCLog( "====>>>> Restore error (%s)", error.get()->GetMessage() ); } |
C2SModule_Cocos2dx::C2SModuleCompletionHandler* completionHandler = NULL);
– 상품을 구매 한다.
1 2 3 4 5 6 7 8 9 10 |
C2SModule_Cocos2dx::C2SModuleError error; Json::Value arg; arg["pid"] = "com.com2us.platformsample.normal.freefull.google.global.android.common.item01"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( C2SModuleInapp_Purchase( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Purcahse error (%s)", error.get()->GetMessage() ); } |
C2SModule_Cocos2dx::C2SModuleCompletionHandler* completionHandler = NULL);
– 구매한 상품의 완료를 알린다.
1 2 3 4 5 |
C2SModule_Cocos2dx::C2SModuleError error; if( C2SModuleInapp_Finish( (char*)NULL, &error ) == false ) { CCLog( "====>>>> Finish error (%s)", error.get()->GetMessage() ); } |