Google Play In App Billing 연동 중 나오는 에러들

 안드로이드 인앱 결제 작업중에 나온 오류를 따로 정리해봅니다.

 결제 요청을 하는 순간 '항목을 찾을 수 없습니다.' 오류가 나오고 확인을 누르면 바로 제대로 된 인앱 제품 정보가 나오는 증상이 있습니다. 이 에러는 Google Play Billing Library에 있는 Dungeons Sample를 연동해서 나온 오류입니다.

 Dungeons.java의 소스중 onClick 함수에서 Buy버튼을 클릭했을 때 mBillingService.requestPurchase를 처리하는 if, else if 문 문제입니다. 딱 보시면 mBillingService.requestPurchase 리턴값에 따라 한번 더 mBillingService.requestPurchase 처리 될 수 있는 구조입니다.

///< 구독이 아니면
if( mManagedType != Managed.SUBSCRIPTION )
{
  if( !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents) )
  {
    showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
  }
}
///< 구독
else
{
  if( !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents) )
  {
    showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
  }
}

 전 이렇게 수정 후 해결했습니다.


 '이 버전의 애플리케이션에서는 Google Play를 통한 결제를 사용할 수 없습니다. 자세한 내용은 도움말 센터를 참조하세요.' 애플리케이션 오류가 발생할 수 있습니다. 확인을 누르면 아래와 같은 로그가 발생합니다.

MarketBillingService.sendResponseCode: Sending response RESULT_DEVELOPER_ERROR for request xxxxxxxxxxxxxx to org.xxxx.game.

 Google Play 개발자 센터에 등록한 APK와 기기에서 개발 테스트 중인 App의 버젼이 달라서 생기는 문제라고 합니다. 하긴 지금 개발자 센터에는 Billing 퍼미션만 추가된 서명된 APK가 올라가 있고, 현재 이클립스로 개발 테스트 중인 App은 Dungeons Sample을 붙여서 연동 개발 테스트까지 하고 있으니 더 개발된 상태죠.

 그래서 서명된 APK를 새로 만들어 개발자 센터에도 올리고 디바이스에 APK를 넣어서 ASTRO 파일 관리자로 폰에 설치를 합니다. 이클립스에서 실행하는 것은 안됩니다. 테스트는 약 1시간 정도 기다린 후 해보시기 바랍니다. 새로 올린 APK가 바로 갱신 안되는 듯 싶네요. 그리고 다시 실행 후 구입을 시도하면 잘 되거나 다른 에러가 발생합니다.


 '요청하신 항목은 구매할 수 없습니다.' 구입할 수 없음 에러가 발생할 수 있습니다. 확인을 클릭 누르면 아래와 같은 로그가 발생합니다.

MarketBillingService.sendResponseCode: Sending response RESULT_ITEM_UNAVAILABLE for request xxxxxxxxxxxxxxxx to org.xxxx.game.


 판매자 계정과 기기에 로그인 된 구글 계정이 같아서 생기는 것이라는 말도 있습니다만 저는 회사 개발자 계정으로 테스트 중이라 제 계정과 같을리는 없죠. 개발자 센터 -> 프로필 수정에 보면 테스트 계정이라는 항목이 있는데, 여기에 제 구글 계정을 넣고 저장을 한 후 해봤지만 역시나 안되는군요.

  제 경우에는 추가 된 인앱 제품을 게시를 안해서 생긴 문제였습니다. 테스트 중인 인앱 제품을 '게시완료' 후 테스트 하니 결제 진행이 되네요. 물론 App은 '게시 안됨'이어도 됩니다.

 사용자는 이 항목을 구입할 수 없습니다 에러는 따로 정리했습니다.

댓글

  1. 오오 좋은 포스트 감사합니다

    답글삭제
    답글
    1. 인앱빌링 연동하시나봐요? 대박나세요~^^

      삭제
    2. 네 그런데 삽질중입니다.. ㅎㅎ 그런데 덕분도움많이 됐습니다..
      그리고 저도 westwood 사의 커멘드엔 컨쿼 씨리즈 좋아했습니다.
      레드얼럿2랑 유리의복수 싱글미션 재미나게 했었습니다 한때ㅎㅎ
      블로그에 좋은자료가 많네요 하나씩 다 읽어봐야겠습니다.
      수고하세요 ^^

      삭제
    3. 헐.. 오전 3시 39분...ㅎ; 열코딩하세요~ ^^

      삭제
  2. 질문이있습니다.

    저는 versioncode 1만 업로드 하고 게시한 상황입니다.
    그런데 업데이트를 하기 위하여 versioncode 2 로 하여 apk 등록하지않고
    폰에 바로 설치후 결제 테스트를 해보니 되는거에요
    안돼야 정상 아닌가요?
    왜 되는지 이유를 알수 있을까요 ?

    답글삭제
    답글
    1. 글쎄요... ㅎㅎ 저도 처음 접하면서 정리했던 것들이라.. 나중에 저도 그리해보고 잘 되면 포스팅을 수정해봐야겠네요.

      삭제
    2. 요즘 다시 인앱빌링을 하고 있는데 또 한번 '이 버전의 애플리케이션에서는 Google Play를 통한 결제를 사용할 수 없습니다. 자세한 내용은 도움말 센터를 참조하세요' 이게 발생해서 다시 apk올려준 이후로는 다시 소스를 수정해도 그냥 바로 폰에 설치해서 해도 잘 되네요. 이 에러가 날때만 apk를 다시 올리면 될 듯합니다.

      삭제
  3. 질문이있습니다.

    저는 '사용자는 이 항목을 구입할 수 없습니다' 라고 뜨는데, 제가 지금 인앱소스를 따로 구현된걸 제가 진행하고 있는 프로젝트에 import 시켰을 때 저런 에러가 발생하는데요.. 같은소스로 따로 떼어져있는 프로젝트는 잘 돌아가는데,, import 시킨 프로젝트에서는 에러가 발생해요ㅠ 이럴땐 어떻게 해야되나요?ㅠㅠ

    답글삭제
    답글
    1. 흠..글쎄요.. 말씀하신 인앱소스가 던전샘플인지는 모르겠으나, 맨 위에 있는 링크에 제가 작업했던 던전 샘플 연동이 있는데 이건 프로젝트에 임포트 해서 한 것이고, 또
      http://westwoodforever.blogspot.kr/2012/12/cocos2d-x-android-in-app-billing.html
      위 링크를 보시면 따로 외부프로젝트로 만들어 jar lib로 사용해서도 해봤는데 역시 잘 되었습니다.
      저도 처음 접하면서 나왔던 것을 정리를한 것뿐이라...
      말씀하신 '사용자는 이 항목을 구입할 수 없습니다' 는 검색해도 나오질 않는군요;;;

      삭제
    2. 처리했습니다^^
      메니페스트에서 아주 사소한 실수가 있었던거 같습니다.
      그런데 또한가지 질문을 드리면..
      하나의 단말기에는 여러 계정을 소유할수 있자나요.
      결제가 완료되면 결제를 한 계정(구글 id)를 가져올 수 잇나요?

      삭제
    3. 고생하셨네요~
      음... 이번역시 답변이 안되겠네요... 제가 전문 안드로이드 개발자가 아닌지라...
      아시다시피 onRequestPurchaseResponse로 오는 인자 RequestPurchase를 봐도 계정 id와 관련된건 보이질 않네요.
      이 부분은.. 안드로이드펍 등 기타 전문 사이트에 질문하시는게 빠르시겠어요~ ^^
      수고하세요~

      삭제

댓글 쓰기

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.