2012년 4월 21일 토요일

[In-app Billing_0]Overview 1

# In-App Billing


- 구글에서 제공하는 부분 결제 모듈이다. 애플리케이션을 만들면서 수익을 낼 수 있는 방법에는 크게 3가지가 있다. 애플리케이션 단위로 판매해서 수익을 얻는 모델,  무료 애플리케이션에 광고를 넣어 수익을 얻는 모델, 마지막으로 무료 애플리케이션으로 배포하고 애플리케이션 내에서 부분 결제를 유도하는 모델이 있다. In-App Billing은 마지막 모델에서 필수적인 모듈이다.


@ In-App Billing Architecture


- 인앱결제는 실제 유저의 프로그램과 구글 플레이(마켓) 서버와 직접 통신을 하지 않습니다. 그 대신 구글 플레이 애플리케이션 간 통신(IPC)를 통해 구글 플레이(마켓) 서버와 통신을 합니다. 이때 비동기 메시지 루프를  사용합니다.

- 컨텐츠를 제공하거나 거래를 확인하기 위해 개인 서비스 서버를 사용할 수 있습니다. 단 이때도 원격 서버와 직접적으로 구글 플레이(마켓) 서버와 직접적으로 결제를 하지 않습니다.


*대표적인 앱인 결제의 3가지 구현 컴포넌트

- A Service : 유저 애플리케이션에서 구입 메시지 처리.
                   인앱 결제 서비스에 결제 요청을 송신.

- A BroadcastReceiver  : 비동기적으로 구글 플레이 애플리케이션의 결제 응답을 수신.

- A Security componet : 보안과 관련된 작업 수행 ( 서명 확인 이나 난수 키)


* 추가적인 2가지 컴포넌트

- A response Handler  :  구입 알림, 에러, 다른 상태 응답에 대한 처리를 지원한다.
- An observer : 응용 프로그램에 결제 관련 응답(상태) 정보에 따라 콜백을 보낸다.

* 유저 컴포넌트

- 추가적으로 구입 아이템에 관한 선택 컴포넌트를 만들 수 있다. 하지만 결제 창에 대한 컴포넌트는 만들 필요가 없다. (구글 플레이에서 제공한다.)



@  인앱 결제 메시지




- 유저가 결제를 시작하면 응용 애플리케이션은 구글 플레이 인앱 결제 서비스에 신호를 보낸다. (IPC) 구글 플레이 애플리케이션은 동기적, 비동기적으로 결제 요청에 대한 응답을 처리한다.

* In-app billing requests


- 응용 애플리케이션은 IMarketBillingService.aidl의 sendBillingRequest() (IPC 메서드)를 사용해서 결제를 요청한다. [이 인터페이스(IMarketBillingService.aidl) 샘플앱에서 얻을 수 있다.]

 interface IMarketBillingService {  
   /** Given the arguments in bundle form, returns a bundle for results. */  
   Bundle sendBillingRequest(in Bundle bundle);  
 }  

- sendBillingRequest()는 하나의 번들 파라미터를 갖는다. 이 번들에 포함 되는 정보는 아래 도표를 참고 하길 바란다.(번들 키)



* BILLING_REQUEST 키 값


- CHECK_BILLING_SUPPORTED : 인앱 결제가 지원하는지 확인, 응용프로그램이 시작될때 보통 요청을 보냄.

- REQUEST_PURCHASE : 응용 프로그램에서 구매 메시지를 전송. 이 요청을 통해 구글 플레이는 결제 화면을 보여 거래를 처리한다.

- GET_PURCHASE_INFORMATION : 구매 상태 변경의 정보 검색 요청. 구매가 성공되었거나, 구매가 취소 되었을때 구매 상태는 변화한다.

- CONFIRM_NOTIFICATIONS : 구매 상태 변경의 정보 검색 요청을 받았음을 알림. 구글 플레이는 이 알림이 올때까지 구매 상태 변경 정보를 보낸다.

- RESTORE_TRANSACTIONS : 제 설치 또는 다른 기기에 처음으로 애플리케이션을 설치 했을 때 관리되는 결제(1한명의 유저가 1번 결제되어 추가로 구매가 되지 않음. managed purchase)가 있는지 검색하는데 사용된다.

* in-app Billing Response


- 요청에 대한 응답은 다음과 같다. 요청의 응답은 동기와 비동기가 있다.



* The synchronous response (동기 응답)


- RESPONSE_CODE : 이 키는 요청에 대한 상태 정보나 응답 정보를 알려 줍니다.

- PURCHASE_INTENT : 이 키는 결제 액티비티의 실행의 PendingIntent를 제공합니다.

- REQUEST_ID : 이 키는 요청 아이디를 제공합니다. 이 아이디를 통해 비동기 응답을 식별할 수 있습니다.

* The asynchronous response(비동기 응답)

: broadcast intents 로서 결제에 대한 정보를 응용 애플리케이션에게 전달한다. 응용 애플리케이션은 a BroadcastReceiver로 해당 정보를 가져와서 사용할 수 있다.


- com.android.vending.billing.RESPONSE_CODE : 이 응답은 구매 요청후 받을 수 있으며, 구글 플레이 서버의 응답 코드를 포함한다. 응답 코드는 구매가 성공적으로 이루어 졌는지, 에러가 발생했는지 표시할 수 있다.

  &Extras

    1. request_id  :  요청을 식별하는 아이디
    2. response_code : 구글 플레이 서버 응답 코드


  &Response Code




- com.android.vending.billing.IN_APP_NOTIFY : 이 응답은 구매 성공, 구매 취소, 환불 같은 결제 상태의 변화를 표시한다. 이때 알림 아이디 (notification ID)를 포함하고 있는데, 이는 각각의 구글 플레이 서버의 메시지와 대응합니다.

 & Extra

  1. notification_id : 결제 세부 상태를 알기 위한 알림 아이디. 이 아이디를 가지고 GET_PURCHASE_INFORMATION 요청을 보내서 관련 정보(트랜잭션 정보)를 알 수 있다.



- com.android.vending.billing.PURCHASE_STATE_CHANGED : 이 응답은 하나 또는 그 이상의 트랜섹션에 대한 세부 정보를 포함한다. 트랜섹션 데이터는 JSON string형태로 포함되어 있다. 이 메시지는 인앱 결제 보안을 보장하기 위해 서명을 포함하고 있다.

 &Extra

   1. inapp_signed_data : JSON 데이터를 나타낸다.
   2. inapp_signature : 문자열 서명을 나타낸다.

 &An example of this JSON string






















































댓글 없음:

댓글 쓰기