Hive SDK v1.19.1부터 IAP v2의 지원을 종료합니다. Hive SDK v1.19.1 이상의 환경에서는 Hive IAP v4를 적용하시기 바랍니다.
본 가이드는 Hive IAP v2에 대해 안내하며, Hive SDK v1.19.0 이하 v1.9.0 이상에서 적용하실 수 있습니다.
C2SModuleHiveIAP_Restore
미지급된 Hive IAP v2 상품에 대한 아이템 지급을 요청한다.
플레이스토어에서 프로모션 코드를 넣을 수 있는데, 게임이 종료된 상태에서도 과금이 가능하다. 이를 체크하기 위해서는 게임 초기화 후 필요한 특정 시점에 restore를 호출해주면 된다.
restore()
메서드를 호출한 결과 값이 SUCCESS이고 Trasaction ID List와 PRoduct List가 전달된 경우 복구할 아이템이 존재하는 상황이다. 미 지급된 아이템을 지급하고 완료로 처리한다.getShopInfo()
메서드를 호출한 후restore()
를 호출하는 이유는, 미지급 건이 있다면 구매 과정 전에 처리하기 위함이다.restore()
호출 결과 값이 SUCCESS가 아닌 경우 게임에서 처리하지 않아도 된다.
Request
argument name | type | description | platform | 비고 |
---|---|---|---|---|
argument 없음 | all |
Response
Restore API 호출시 error 리턴 여부로 구매 성공/실패 판단
argument name | type | description | platform | 비고 |
---|---|---|---|---|
gameProducts | array | 게임 상품 정보 리스트 | all | 1.11.2+ |
gameTransactionIds | array | 게임 상품에 대한 Hive IAP의 transactionId (string array) | all | 1.11.2+ |
array type for gameProducts
(locationCode = “DEFAULT” 를 사용한다면 비고에 * 이 표시된 값은 사용하지 않는다.)
argument name | type | description | platform | 비고 |
---|---|---|---|---|
pid | string | 게임에서 사용하는 상품 pid | all | |
marketPid | string | 마켓에 등록된 상품 pid | all | |
price | double | 상품 가격 | all | |
displayPrice | string | 상품 가격 문자열(ex. ₩1,000) | all | |
currency | string | 통화 코드 | all | |
additionalInfo | string | (JSON string 형태) 구매시 입력한 추가 정보 (default “”) |
all | 1.12.1+ |
title | string | 상품 타이틀 | all | * |
description | string | 상품 설명 | all | * |
badgeImageUrl | string | 뱃지 이미지 url | all | * |
productImageUrl | string | 상품 이미지 url | all | * |
titleLandscapeImageUrl | string | 상품 타이틀 이미지 (가로) | all | * |
titlePortraitImageUrl | string | 상품 타이틀 이미지 (세로) | all | * |
descLandscapeImageUrl | string | 상품 설명 이미지 (가로) | all | * |
descPortraitImageUrl | string | 상품 설명 이미지 (세로) | all | * |
productType | string | 상품 타입 일반 상품 : general / 시리즈 상품 : series |
all | 1.11.2+ * |
salesStartUTC | long | 상품 판매 시작 시간 -1일 경우 무제한 |
all | 1.11.2+ * |
salesExpireUTC | long | 상품 판매 만료 시간 -1일 경우 무제한 |
all | 1.11.2+ * |
seriesInfo | dictionary | 시리즈 상품 정보 (productType = general일 땐 필드 없음) |
all | 1.11.2+ * |
샘플 코드
Unity®
API Reference: C2SModule.HiveIAP.Restore
- public static bool C2SModule.HiveIAP.Restore(C2SModule.Parameter arg, out C2SModule.Error error);
- public static bool C2SModule.HiveIAP.Restore(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
1 2 3 4 5 6 7 8 9 |
public void hiveIAPRestore(Action completionHandler) { C2SError error; C2SParameter arg = new C2SParameter (); // Restore 요청시 입력값은 없음 C2SModule.HiveIAP.Restore(arg,out error,(C2SParameter resultArg,C2SError resultError) => { completionHandler(resultError); }); } |
Unreal
API Reference: HiveSDKUEHiveIAP_Restore
- void HiveSDKUEHiveIAP_Restore(FString fstrJson);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
FString empty; FHiveSDKModule::Get().HiveSDKUEHiveIAP_Restore(empty); // Restore 요청시 입력값은 없음 *Result Delegate example #if PLATFORM_IOS || PLATFORM_ANDROID void MYGAMECLASS::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { //... switch(api) { case C2SModuleApi_HiveIAPRestore: { if(code == 0) { // success. } break; } } //... } #endif |
Cocos2d-x
API Reference: C2SModuleHiveIAP_Restore
- bool C2SModuleHiveIAP_Restore(const char* pstrJson, C2SModule_Cocos2dx::C2SModuleError* pkError,
C2SModule_Cocos2dx::C2SModuleCompletionHandler* completionHandler = NULL);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void SampleProject::menuInappRestoreCallback(cocos2d::Ref* pSender) { C2SModule_Cocos2dx::C2SModuleError error; // Restore 요청시 입력값은 없음 if( C2SModuleHiveIAP_Restore( (char*)NULL, &error ) == false ) { CCLog( "====>>>> C2SModuleHiveIAP_Restore error (%s)", error.get()->GetMessage() ); } } void SampleProject::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { case C2SModuleApi_HiveIAPRestore: { if(code == 0) { // success. } } break; } |
iOS
API Reference: C2SModuleHiveIAP Restore
- +(BOOL)Restore:(id)arg error:(NSError**)error;
- +(BOOL)Restore:(id)arg error:(NSError**)error completionHandler:(void(^)(NSDictionary *, NSError*))
completionHandler;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-(void)restoreIAP:(void(^)(NSError* error))completionHandler { NSError* error; [C2SModuleHiveIAP Restore: nil error:&error completionHandler:^(NSDictionary* resultArg, NSError* resultError) { if(resultError ==nil){ //succeed } completionHandler(resultError); }]; } HiveIAPInfoBadge* badge = [[HiveIAPInfoBadge alloc]init]; if(resultError == nil){ //success if ( [resultArg objectForKey : @"badgeImageUrl"]!=nil) badge.badgeURL = [resultArg objectForKey : @"badgeImageUrl"]; badge.isBadgeExist= [resultArg[@"isBadgeExist"] boolValue]; } }]; } |