소비 정보 전송
부가 서비스에서 소비 정보 전송을 사용하면, 앱 사용자가 환불 요청을 할 때 사용자 소비 행태 정보를 앱 마켓에 전송할 수 있습니다. 이 API는 Hive 서버가 개발사 앱 서버로 요청을 보내면, 개발사 서버에서 응답값을 Hive 서버로 돌려주는 API입니다.
Note
현재 소비 정보 전송은 Apple 앱 마켓(Apple AppStore)만을 지원합니다.
개요¶
앱 마켓에 전송할 소비 정보에는 게임 서버에만 존재하는 데이터도 있습니다. 따라서 Hive 서버가 이 데이터를 앱 마켓에 전송하려면, 게임 서버에서 Hive 서버에 데이터를 전달해줘야 합니다.
게임 서버 URL은 게임 서버가 Hive 서버에 데이터를 전달하기 위해, 게임 서버에서 열어놓은 API 엔드포인트입니다. 아래 규약에 따라 API 엔드포인트를 구성한 후 이를 게임 서버 URL에 등록하시면, 사용자가 환불 요청을 할 때마다 Hive 서버가 이 API 엔드포인트로 POST 요청을 하고 필요한 데이터를 게임 서버로부터 전달받습니다. Hive 서버는 이 데이터를 취합해 앱 개발사를 대신해 앱 마켓에 소비 정보 전송을 완료합니다.
전체 과정을 요약하면 아래와 같습니다.
- 앱 개발사: API 엔드포인트를 구성해 서버 URL을 준비
- 앱 개발사: Hive 콘솔에서 소비 정보 전송 사용 선택, 서버 URL을 등록
- 앱 사용자: 앱 실행한 상태에서 인앱 상품 소비 정보 전송에 동의
- 앱 사용자: 앱에서 환불 요청
- Hive 서버: 앱 개발사가 등록한 서버 URL로 POST API 요청, 응답값으로 데이터 수령
- Hive 서버: 앱 마켓에 소비 정보 전송
Warning
만약 사용자가 앱 사용자가 동의 팝업에서 정보 전송에 동의하지 않으면, Hive 서버는 게임 서버로부터 데이터를 받더라도 이를 앱 마켓에 전송하지 않습니다.
API 엔드포인트 구성(서버 URL)¶
서버 URL에 등록할 API 엔드포인트는 요청을 받을 때 게임 사용자별 데이터(consumption_status, play_time, refund_preference, sample_content_provided)를 집계하고, 요청 매개변수에 있는 사용자 정보(CS_CODE)로 조회할 수 있는 집계 데이터를 응답으로 전달해야 합니다.
방화벽 규칙 해제¶
방화벽 인바운드 규칙을 해제해 게임 서버와 Hive 서버 간 API 통신을 허용합니다. 게임 서버에서 아래 IP 주소에 대해 방화벽 인바운드 규칙을 해제해야 합니다.
| Hive 서버 종류 | IP 주소 | 
|---|---|
| 상용 IP | 43.201.165.236 | 
| Sandbox IP | 43.155.181.83 | 
방화벽 규칙 해제 후, 아래 내용을 참고해 API 엔드포인트를 구성합니다.
API 요청(Hive 서버 → 게임 서버) 구성¶
Hive 서버에서 게임 서버로 보내는 POST 요청 정보입니다.
| API 정보 | 설명 | 
|---|---|
| Method | POST | 
| Reponse Format | JSON | 
| Content-type | application/json | 
다음은 Request Body 정보입니다.
| 명칭 | 타입 | 필수 여부 (필수: M, 옵션: O) | 설명 | 
|---|---|---|---|
| gameindex | String | M | Hive 앱센터 게임 인덱스 | 
| appid | String | M | Hive 앱센터 AppID | 
| user_seq | String | M | 게임 내 사용자 CS CODE | 
다음은 Request Body 예시입니다.
{
    "gameindex": "539",
    "appid": "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal",
    "user_seq": "222333"
}
API 응답(게임 서버 → Hive 서버) 구성¶
응답 성공 시, 게임 서버에서 Hive 서버로 전달해야 하는 응답값 정보입니다.
| 명칭 | 타입 | 필수 여부 (필수: M, 옵션: O) | 설명 | 
|---|---|---|---|
| code | Integer | M | 응답 코드 (100: 성공) | 
| message | String | M | 응답 코드에 따른 결과 메시지 | 
| data | Object | M | 응답 데이터 (응답이 성공일 경우에만 반환, 에러 시 미반환) | 
| ┕ consumption_status | Integer | M | 소모성 아이템 소비 상태("0" 또는 "3"을 선택하여 고정 값으로 응답) | 
| ┕ play_time | Integer | M | 게임 플레이 시간 | 
| ┕ refund_preference | Integer | M | 환불 선호도 | 
| ┕ sample_content_provided | Integer | M | 샘플 콘텐츠 제공 여부 | 
다음은 응답 성공 시 응답값 예시입니다.
// 성공한 경우
{
    "code": 100,
    "message": "OK",
    "data": {
        "consumption_status": 0,
        "play_time": 1,
        "refund_preference": 2,
        "sample_content_provided": 0
    }
}
다음은 응답 실패 시 응답값 예시입니다.
다음은 응답 코드들입니다.
| 코드 | 설명 | 
|---|---|
| 100 | 성공 | 
| 200 | 유효하지 않는 사용자 정보 (CS_CODE) 일 경우 | 
| 400 | 요청 파라미터 오류 | 
| 401 | 요청 JSON 에러 | 
| 500 | 서버 처리 오류 | 
| 501 | DB 통신 오류 |