빌링 개발 연동
1. 기본 설명
- 빌링을 게임에 연동하는 과정에서 놓칠 수 있는 부분에 대한 간단한 체크리스트입니다.
- 개발을 위한 모든 내용이 포함되어 있지는 않습니다. 상세 내용은 SDK 및 서버 API 상세 가이드 등을 참고하세요.
2. 체크리스트
| 구분 | 내용 | 비고 |
|---|---|---|
| 전체 공통 | 구매 복구 기능이 준비되어 있는지?
|
|
| 클라이언트(with SDK) | GetProduct()로 상품 조회 후 등록되지 않은 상품에 대해서 QueryProductDetails 호출하는지?
| |
재 로그인 후에 빌링플랫폼 PreInit을 변경된 계정 정보와 함께 호출하는지?
| ||
| 빌링플랫폼 PreInit 후 게임 플레이 가능한 상태로 진행한 경우 구매복구 요청하는지? | ||
결제 후 수신한 영수증 정보를 게임서버에 구매 완료 요청한 후 수신한 결과 SDK에 알려주는지?
| ||
| 결제 어뷰징 건으로 자동제재된 경우 로그인 시 서비스 이용 제재 팝업이 정상 노출하는지? | 결제 어뷰징 자동 제재 기능을 사용하는 경우에만 해당 | |
| 스팀 결제(게임서버) | API 호출 타임아웃은 최소 30초로 설정 하였는지?
| |
| 애플 결제(게임서버) | 영수증 검증 API의 타임아웃은 최소 15초로 설정하였는지?
| |
| 애플 결제(클라이언트) | 구매 복구 과정에서 수신한 영수증으로 게임서버에게 구매 완료를 요청할 때, 게임서버로부터 이미 지급한 구매건으로 결과를 수신한 경우 OnCompletedPurchase(true)로 호출하여 미처리 구매건을 완료처리하는지? |
2-2. 구매 복구 체크리스트 관련 추가 설명
Android, Google Play Games
- 시나리오1 : 결제 완료 후 게임 서버에 결제 영수증 전송 실패
- 결제 완료 ➔ 앱: 결제 영수증 수신(X)
- 결제 완료 ➔ 앱: 결제 영수증 수신 ➔ 게임서버 전달(X)
- 앱 : 게임서버 로그인 ➔ BillingPlatform.Restore() 호출 ➔ 결제 영수증 수신 ➔ 게임서버 전달
- 게임서버 : 앱: 결제 영수증 수신 ➔ 결제 백엔드 연동 결제 프로세스 진행
- 시나리오2 : 결제 완료 후 게임 서버에 결제 영수증 전송 성공
- 결제 완료 ➔ 앱: 게임 이벤트 수신(O)
- 결제 완료 ➔ 앱: 게임 이벤트 수신 ➔ 게임서버 전달(O)
- 앱 : 게임서버 로그인
- 게임서버 : 로그인 한 계정에 미 완료된 결제 있는지 체크 후 프로세스 완료
경고
게임에서 Restore() 호출로 구매 복구를 시도하기 전에, 게임 서버 로그인 후 미 완료된 결제 건이 있는지 체크하여 미처리 결제 프로세스를 완료되어야 합니다.
PlayStore 결제는 서버로 결제 영수증이 전달 된 후에는 클라이언트 개입 없이 서버에서 결제가 완료되어야 한다.
서버로 결제 영수증이 전달되지 않은 결제 건에 대해서 Restore()를 호출하여 결제 영수증을 구해야합니다.
iOS
- 시나리오1 : 결제 완료 후 게임 서버에 결제 영수증 전송 실패
- 결제 완료 ➔ 앱: 결제 영수증 수신(X)
- 결제 완료 ➔ 앱: 결제 영수증 수신 ➔ 게임서버 전달(X)
- 앱 : BillingPlatform.Restore() 호출 ➔ 결제 영수증 수신 ➔ 게임서버 전달
- 게임서버 : 결제 영수증 수신 ➔ 결제 백엔드 연동 결제 프로세스 진행
- 앱 : 결제 프로세스 완료 후 결제 결과 수신
- BillingPlatform.OnPurchaseCompleted(true) 호출 ➔ 중요 반드시 호출되어야 한다.
- true을 호출하지 않으면 미처리 상품으로 계속 남게 되어 Restore() 호출할 때 마다 결제 영수증을 서버에 전달하게 된다.
- 이미 아이템 지급까지 완료된 결제 건에 대해서도 Restore() 호출로 결제 영수증이 수신되어 게임서버에 전달될 수 있음
- 시나리오2 : 결제 완료 후 게임 서버에 결제 영수증 전송 성공
- 결제 완료 ➔ 앱: 결제 영수증 수신(O)
- 결제 완료 ➔ 앱: 결제 영수증 수신(O) ➔ 게임서버 전달(O)-> 결제 프로세스 완료(X)
- 결제 완료 ➔ 앱: 결제 영수증 수신(O) ➔ 게임서버 전달(O) -> 결제 프로세스 완료(O)
➔ 아이템 지급(O) ➔ BillingPlatform.OnPurchaseCompleted(true)를 호출 (X)- 앱 : BillingPlatform.Restore() 호출 ➔ 결제 영수증 수신 ➔ 게임서버 전달
- 게임서버 :
- (1) 로그인 한 계정에 미처리 결제 건이있는지 체크 후 프로세스 완료
- (2) BillingPlatform.Restore() 호출로 결제 영수증 수신
- (1)에서 이미 완료한 결제 건 인 경우 ➔ 앱에 결과 전달
- 결제 프로세스 완료되지 않은 경우 ➔ 결제 백엔드 연동 결제 프로세스 진행 ➔ 앱에 결과 전달
- 앱 : 결제 프로세스 완료 후 결제 결과 수신
- BillingPlatform.OnPurchaseCompleted(true) 호출
- 이미 아이템 지급까지 완료된 결제 건에 대해서도 BillingPlatform.Restore() 호출로 결제 영수증이 수신되어 게임 서버에 전달될 수 있음
- 서버에서 완료 결과를 앱 이 수신 실패 하여 OnPurchaseCompleted(true) 호출이 안되는 경우
- 이미 지급된 결제 건에 대해서도 반드시 OnPurchaseCompleted(true)를 호출하여 결제를 완료해야 한다. ((2) - (1) 경우 해당)
- BillingPlatform.OnPurchaseCompleted(true) 호출
경고
iOS는 앱에서 결제 프로세스가 완료되기 때문에, Restore() 호출로 수신 된 결제 영수증이 게임 서버에 전달된 후에는 반드시 OnPurchaseCompleted(true)를 호출하여 결제를 완료해야 한다.
OnPurchaseCompleted(true) 호출로 결제를 완료하지 않으면 AppStore에 미처리 결제 건으로 계속해서 남아있게 됩니다.
정리하면, 결제 영수증 소비 처리는
- 안드로이드 : 서버에서 결제 프로세스 과정에서 소비 처리
- iOS : 앱에서 OnPurchaseCompleted(true) 호출로 결제 프로세스 과정에서 소비처리 즉, 게임에서 결제 영수증 소비 처리
- true로 호출하지 않으면 Restore() 호출할 때 마다 미처리 결제 건으로 결제 영수증이 게임으로 전달됩니다.
- 이미 지급된 결제 건에 대해서 중복 요청한 경우 게임 서버에서 게임으로 '이미 지급한 결제' 건으로 정보를 전달하고 이 경우에 게임은 OnPurchaseCompleted(true) 호출하여 이미 지급된 결제 건을 소비처리 해야 합니다.