adsense



구글 in app purchase 테스트 시 발생하는 오류들

※ 셀프 참고용

1. 요청하신 항목은 구매할 수 없습니다.

- 원인 : 게시 상태가 아닌 apk를 스토어를 통하지 않고 직접 설치한 경우에 발생한다.
- 해결
: 최소한 알파 버전을 게시한다. <- apk에는 인앱 결제용 빌링 퍼미션이 설정되어 있어야 한다.
: 테스트에 사용할 계정을 비공개 알파/베타 테스트에 등록한다. (공개 알파/베타 테스트도 무관)
: 알파/베타 테스트가 활성화되면 이후 테스트 참여 URL을 통해 원격 설치한다.

2. 게시자는 이 항목을 구입할 수 없습니다.

- 원인 : 개발자 계정이 아닌 계정을 사용해야 한다.
- 해결
: 기존에 설치된 앱은 삭제한다.
: 데스크탑에서 테스트용 계정으로 로그인한 브라우저에서, 앱의 테스트 참여 URL을 통해 원격 설치한다. (크롬 추천)
: 이후에도 같은 문제가 생길 경우, 삭제->단말의 구글 플레이 스토어와 플레이 게임을 각각 테스트 계정으로 전환->재부팅->원격설치
: 한 번 원격설치하고 나면 이후에는 삭제하지만 않으면 apk를 직접 설치해도 된다.

3. 재구매가 되지 않는다

- 원인 : 소비 처리가 되지 않았다. (consume 처리가 되지 않았다)
- 해결
: getPurchases을 통해 현재 처리되지 않은 구매상태의 아이템 정보를 받아온다.
: 아이템 정보 중 INAPP_PURCHASE_DATA_LIST는 구매 정보에 관련된 JSON 파일을 갖고 있다.
: 여기서 purchaseToken을 얻어낸다.
: 얻어낸 purchaseToken으로 consumePurchase를 호출한다.
: 이상의 소스코드 간략. (전체 구현은 구글의 인 앱 결제 구현을 참조)
    Bundle ownedItems = mService.getPurchases(3, getPackageName(), "inapp", null);//구매한 아이템 목록 받아온다.
ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");//구매 정보를 가져온다
for(int i=0;i<purchaseDataList.size();++i){
String purchaseData = purchaseDataList.get(i);
JSONObject jo = new JSONObject(purchaseData);
String _token = jo.getString("purchaseToken");//구매정보에서 purchaseToken을 얻어낸다
int consumeResponse = mService.consumePurchase(3, getPackageName(), _token);//소비 처리한다
if (consumeResponse == 0){//아이템의 소비에 성공했다<-이 아이템은 구매한 목록에서 사라진다
/*
아이템 획득 처리를 한다.
*/

}
}

※ 이상은 runOnUiThread를 통해 별도의 스레드로 동작시켜야 한다.


p.s.)실제 결제가 이루어지지 않는 샌드박스 테스트

: 개발자 콘솔->설정->계정 세부정보->테스트 권한이 있는 Gmail 계정 <- 여기에 테스트 계정을 추가.
: 결제창에서 '테스트 주문이므로 결제되지 않습니다' 라는 안내가 나온다.
: 결제하더라도 주문 관리에는 나타나지 않고 order ID도 부여되지 않는다.
: 결제 성공 여부를 확인할 수 있도록 등록된 테스터 계정으로 테스트 결제 안내 메일이 전송된다.
: 결제 프로세스는 정상적으로 탄다.



덧글

댓글 입력 영역


Books

Geek라이프

메가 드라이브 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

미소녀 일러스트 테크닉
B-은하, pen스케, 카와이 저/정유진 역

핵심강좌! Cocos2d-x
이재환 저

피규어의 교과서 레진 키트 & 도색 입문 편
후지타 시게토시 저/김정규 역
예스24 | 애드온2
일본서적 전문사이트 NEPIC