반응형

InApp Billing Sample Test Program(Trivial Drive) 구입시의 Logic


1. Main의 onBuyGasButtonClicked 함수에서 mHelper(IanHelper)의 launchPurchaseFlow 호출


2. launchPurchaseFlow 함수에서 getBuyIntent 호출

Bundle buyIntentBundle = mService.getBuyIntent(3, mContext.getPackageName(), sku, itemType, extraData); 

int response = getResponseCodeFromBundle(buyIntentBundle);


3. 성공적으로 번들이 생성되었으면 결제창을 생성한다.

PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT); 

act.startIntentSenderForResult(pendingIntent.getIntentSender(), requestCode, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));


4. 결제가 끝나면 Main의 onActivityResult() 호출되고 여기서 mHelper.handleActivityResult()호출

handleActivityResult 에서 결제여부를 파악하고, onIabPurchaseFinished() 호출하며 결제 데이터를 넘김(purchase)


5. Main 함수의 onIabPurchaseFinished 에서 결제된 item에 대한 확인을 한 뒤 consumeAsync 호출


6. consumePurchase() 호출후 onConsumeFinished()가 호출됨

'Computer Programming > Android' 카테고리의 다른 글

[Android] 안드로이드 스트링 비교  (0) 2015.09.24
[Android]BroadCast Err(Handler?)  (0) 2013.09.23
[Android]InApp Billing - 2  (0) 2013.08.08
[Android]InApp Billing - 1  (0) 2013.08.07
반응형

1. 관리되는 제품과 관리되지않는 제품의 차이는 무엇인가??

두 가지 경우 모두 consume 이 가능한 item이다.

관리되는 인앱 제품 -> 비소모성 아이템

관리되지 않는 인앱제품 -> 소모성 아이템

Google Billing 에서 등록시 위와 같이 등록하라고 하는데 App 에서 consume을 적용하느냐의 여부에 따라서 등록된 아이템이 비소모성 아이템이냐 소모성 아이템이냐가 적용된다. 그러면 Google Billing에서 관리되는 인앱제품과 관리되지 않는 인앱제품으로 따로 분류 하는 이유는 무엇이고, 분류를 맞추지 않으면 불편한점이나 애로사항이 있을까?


2. 판매되는 제품의 전체 item 리스트를 가져올 수 있나?

기본적으로 결제 시스템을 사용할 때, item을 Google Play에 등록시 같은 item 명칭을 앱에 등록하여 Matching 하여 가져 오기 때문에 앱이 구입할 item List를 가지고 있기 때문에 필요가 없다고 판단된다.

위와 같은 방법을 따로 찾아볼 수는 없었다.


3. 활성화된 비소모성 아이템 리스트(과거 구매 후 컨슘이 안된 리스트)의 파악이 가능한가?

아이템 리스트와 함께 각 아이템의 활성화 정보는 oncreate 함수가 생성시에 inventory에 query 관련 함수를 통해서 셋팅이 된다. 

그리고 각각 item 의 결제 여부는 다음 방법으로 확인이 가능하다.

Purchase premiumPurchase = inventory.getPurchase(ITEMNAME);

premiumPurchase.getPurchaseState();

위의 값의 return 값은 0(구입), 1(취소), 2(환불) 이다.


또한 아래의 함수가 Callback으로 실행될때 

public void onIabPurchaseFinished(IabResult result, Purchase purchase)

result 값으로 mResponse : 7

mMessage : Item Already Owned 값이 리턴된다.


4. 위의 리스트가 같은 계정인 경우, 새로운 장치에 설치 후에도 가능 한가?

Yes, 구글 플레이의 결제 정보는 기본적으로 User 에 귀속되기 때문에 App 시작시 Check를 하게 되면 가능하다.


'Computer Programming > Android' 카테고리의 다른 글

[Android] 안드로이드 스트링 비교  (0) 2015.09.24
[Android]BroadCast Err(Handler?)  (0) 2013.09.23
[Android]InApp Billing - 3  (0) 2013.08.08
[Android]InApp Billing - 1  (0) 2013.08.07
반응형

InApp Billing Sample Test Program(Trivial Drive) Structure


1. Main 의 OnCreate 에서 mHelper(IabHelper).startSetup 호출


2. IabHelper 의 startSetup 에서 ServiceConnection 인스턴스 생성


3. InAppBillingService bind 요청 후 onServiceConnected() 호출

 public void onServiceConnected(ComponentName name, IBinder service) {

      mService = IInAppBillingService.Stub.asInterface(service);

IInAppBillingService를 사용할 수 있는 mService 셋팅


4. isBillingSupported 를 이용하여 결제가능여부 확인

 int response = mService.isBillingSupported(3, packageName, ITEM_TYPE_INAPP);

ITEM_TYPE_INAPP 은 inapp과 subs가 존재한다. inapp은 item 방식의 상품을 의미하고 subs는 구독하여 결제하는 상품을 의미한다.

- 다음은 RESPONSE의 Define

 BILLING_RESPONSE_RESULT_OK = 0;

 BILLING_RESPONSE_RESULT_USER_CANCELED = 1;

 BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE = 3;

 BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE = 4;

 BILLING_RESPONSE_RESULT_DEVELOPER_ERROR = 5;

 BILLING_RESPONSE_RESULT_ERROR = 6;

 BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED = 7;

 BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED = 8; 


5. response 의 결제 여부 check 후, lisner 를 통해 Main 의 startSetup 를 불러온다.

listener.onIabSetupFinished(new IabResult(BILLING_RESPONSE_RESULT_OK, "Setup successful.")); 


6. Main 의 StartSetup에서 mHelper(IabHelper).queryInventoryAsync() 호출 

- query한 item이 들어갈 inventory 생성 후


7. IabHelper의 queryInventoryAsync에서 queryPurchases()호출

ArrayList<String> ownedSkus = ownedItems.getStringArrayList(INAPP_ITEM_LIST);

ArrayList<String> purchaseDataList = ownedItems.getStringArrayList(INAPP_PURCHASE_DATA_LIST);

queryPurchases() 는 구매된 Product List 를 가져온다.


8. querySkuDetail() 함수를 호출해 결제한 ID 에 대한 상세 정보를 가져온다.


9. queryInventoryAsync 가 끝나면 Main 함수의 onQueryInventoryFinished 호출


10. onQueryInventoryFinished 에서는 inventory의 item 을 받아와서 comsume


'Computer Programming > Android' 카테고리의 다른 글

[Android] 안드로이드 스트링 비교  (0) 2015.09.24
[Android]BroadCast Err(Handler?)  (0) 2013.09.23
[Android]InApp Billing - 3  (0) 2013.08.08
[Android]InApp Billing - 2  (0) 2013.08.08

+ Recent posts