2014년 8월 6일 수요일

[Android] 쉽게 풀어 쓴 구글 인앱 결제 구현

여기 저기 검색을 해봐도 부분 결재에 대해서는 정확히 읽기 쉽게 나오는 게 없어서
이렇게 고생 좀 덜 하시라고 글을 올립니다



 1. 안드로이드 마켓에 들어가서 유료결재 가능한 계정으로 변환을 합니다
     (인터넷에 많고 그냥 클릭해서 해도 한글이라 할만 하외다~)
    그러면 아래와 같이 스샷이 나옴
 

    어플 밑에 인앱제품이라고 보이죠? 이제 그것을 클릭해서 들어갑니다

2. 그럼 아래와 같은 그림이 뜨는데 이미 전 테스트 용으로 만들어 놔서 아이템 4개가 보이는 군요
    아마 처음하면 당연히~ 아무것도 없겠죵? 오른쪽 아래의 주황색 동그라미를 친 '인앱제품추가'
    를 눌러주세요


3. 이제 아이템을 만들때 중요한 것이 3가지 있습니다 스샷에 표시 했으니 잘 보세요
   - 구매 유형: '사용자 계정당 관리됨'을 선택하게 되면 유저는 단 한 번만 구매를 할수 있습니다
                     즉 결재를 해야 다른 스테이지도 열리는 그런 구조의 어플에서 사용하는 거죠
                     '관리되지 않음'을 선택하게 되면 중복 구매도 가능합니다 포인트 종류의 아이템은
                      계속해서 사잖아요 그러니 이것은 판매하려는 아이템에 따라 잘 선택해 주시기
                      바랍니다
   - 인앱 제품ID: 이것은 폰쪽에서 호출을 할 때 사용하는 것으로 해당하는 아이템의 ID가 여기에
                       등록한 것과 폰쪽 소스에 등록한 것이 일치해야하니 이상하게 적으면 옮겨적기
                       힘들겠죠? 알아보기 편하게 적어 주세요~

   - 가격: 당연히 가격이 중요하죠 ㅋㅋㅋ 최저가 이상 되야 하는데 자동완성하면 환율에 따라 자동
              완성이 되지만 최저가 이상이 안된 것은 자동으로 체크 해주니 걍 하시면 되요~



   예시 화면을 보여 드립니다 아래쪽 말이라는 아이템을 만들었고 'horse_001'이라는 아이디를
   가지고 있습니다 이 아이디는 뒤에서 소스 코딩시 다시 사용하게 됩니다

4. 이제 마켓에서 사용자 '프로필 수정'으로 들어가면 공개 키라고 있습니다 이것을 복사를 합니다
  

  

5. 이제 드디어 소스 코딩을 할 차례이네요 ㅋㅋ 이 글에 첨부된 파일을 다운 받습니다
    그대로 이클립스에 프로젝트를 만들어줍니다(모르시나요? 네이년 검색 고고싱)
    크흘흘흘 Manifest 파일을 열어 봅니다(이게 무슨 소리 인지 모르신다면 아마 안드로이드
    공부를 먼저 해야 합니다 리모콘도 버튼을 눌러야 작동하니까요 이정도는 알아야 되욘ㅋㅋㅋ)

    아래 부분은 여러분의 프로젝트에 추가하는 걸 돕기 위해(리모콘이니깐!!) 그런 형식으로
    설명을 합니다~~ 띠용~ 참 쉽죠잉~

    이 부분을 여러분이 사용하려는 프로젝트의 마니페스트에 넣어줍니다 (22번째 줄~   30번째줄)

   <service android:name="dungeons.BillingService" />
   <receiver android:name="dungeons.BillingReceiver" >
       <intent-filter>
          <action android:name="com.android.vending.billing.IN_APP_NOTIFY" />
          <action android:name="com.android.vending.billing.RESPONSE_CODE" />
          <action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" />
       </intent-filter>
   </receiver>
  
  그리고 밑에 요 퍼미션도 추가해서 붙여 주세요(33번째 줄)

  <uses-permission android:name="com.android.vending.BILLING"/>


6. 이제 Dungeons을 열어 주세요 (이제 바로 'buy' 버튼이 있는 곳이랍니다)
    (안에 있는 소스코드와 패키지 명은 꼭 그대로 사용해주세요 )

    - 'base64EncodedPublicKey' 변수에 아까 마켓에서 복사한 공개키를 넣어주세요(70번째줄)
    -  결재요청하는 부분은 'mBillingService.requestPurchase("horse_001", null)' 이 부분(96번째줄)
        입니다 이 예제에서는 클릭하면 실행이 되게 되어 있죠
  
    아까 제가 말씀드린대로 저는 'horse_001' 이라고 아이템 이름을 지었으니 그에 해당하는
    아이디를 인자로 호출을 하게 되면 해당하는 아이템의 정보가 마켓에서 열리게 됩니다
    그리고 이제 여러분이 꾸미고 싶은 디자인을 main.xml파일을 수정하고 Dungeons 클래스를
    수정해서 사용하면 되겠네요 언제든지 그 클래서 안해서

    'mBillingService.requestPurchase(아이템 아이디, null)'하면 결재를 요청하니까요



7. 마지막으로 결재 후에는 어떻게 될까요
    결재후 처리를 안하면 유저는 돈만 버리게 되는 거니 구매 상태가 변했을 때 들어오는 곳은
    'onRequestPurchaseResponse(RequestPurchase request, ResponseCode responseCode)'
    함수 입니다 인자로 들어오는 request를 이용하면 어떤 아이템에 관한 것인지 알수 있죠
    (request.mProductId <-- 요게 상태 변화와 관련된 아이템)
     현 소스를 기준으로 주석도 있지만~
      136 ~ 143 줄은 구매 성공시 실행되는 부분
          (responseCode == ResponseCode.RESULT_OK)
      145 ~ 148 줄은 구매 취소시 실행되는 부분
           (responseCode == ResponseCode.RESULT_USER_CANCELED)
      150 ~ 153 줄은 구매 실패시 실행되는 부분
           (else)
     해당하는 아이템의 아이디에 따라 알아서 처리 해주면 됩니다.
   
  

문제점 있으시면 댓글 주세요^^


 InAppBillingTest.zip

댓글 없음:

댓글 쓰기