본문 바로가기

Development/Android

[Android] In App Billing - Version3 적용하기~!

Android In App Billing - Version3 적용하기~!


안드로이드 공식 홈페이지에서 참고하여 테스트를 진행해보았다. 


1. 라이브러리 설치되었는지 확인한다.

 Android SDK Manager 에서 Extras Selection 이동~!

Google Play Billing Library 가 설치되어있지 않으면 설치~!!



2. 설치가 완료되었다면 프로젝트에 적용하자~! 먼저 com.android.vending.billing 패키지를 생성한다.

그리고 <sdk>/extras/google/play_billing/이 경로로 가면 IInAppBillingService.aidl 를 발견수 있다.~!


해당 파일을 복사하여 아까전 생성한 패키지에 넣는다.~!




3. AndroidManifest.xml 에 billing Permission을 주자~!


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


4. In App을 사용할 Activity에 아래의 코드를 맴버 변수로 추가한다.


IInAppBillingService mService;

ServiceConnection mServiceConn = new ServiceConnection() {
   
@Override
   
public void onServiceDisconnected(ComponentName name) {
       mService
= null;
   
}

   
@Override
   
public void onServiceConnected(ComponentName name,
     
IBinder service) {
       mService
= IInAppBillingService.Stub.asInterface(service);
   
}
};


5. OnCreate함수에 아래의 Service를 bind 한다.


@Override
public void onCreate(Bundle savedInstanceState) {    
   
super.onCreate(savedInstanceState);
    setContentView
(R.layout.activity_main);        
    bindService
(new
       
Intent("com.android.vending.billing.InAppBillingService.BIND"),
                mServiceConn
, Context.BIND_AUTO_CREATE);

6. Destroy에서는 Service를 unbind 한다.


@Override
public void onDestroy() {
   
super.onDestroy();
   
if (mServiceConn != null) {
        unbindService
(mServiceConn);
   
}  
}

7. 결제가 완료되고 나서 완료후 onActivityResult 에서 정보를 받는다 간단히 로그만 뛰우는 정도로 구현~!


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   
if (requestCode == 1001) {          
     
int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
     
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
     
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
       
     
if (resultCode == RESULT_OK) {
         
try {
           
JSONObject jo = new JSONObject(purchaseData);
           
String sku = jo.getString("productId");
            alert
("You have bought the " + sku + ". Excellent choice,
               adventurer!"
);
         
}
         
catch (JSONException e) {
             alert
("Failed to parse purchase data.");
             e
.printStackTrace();
         
}
     
}
   
}
}


8.  결제하기~!


sku가 Item id 이며 마지막  developerPayload 는 마음대로...하면 되는듯?~ 하다.


Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), sku, "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");

PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
startIntentSenderForResult(pendingIntent.getIntentSender(),
   
1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
   
Integer.valueOf(0));


9. 오류시...

이 버전의 애플리케이션에서는 google play를 통한 결제를 사용할 수 없습니다. 자세한 내용은 도움말 센터를 참조하세요

라는 문구와 함꼐 진행이 되지 않는다면 이클립스에서 Run을 한 앱의 경우 위와 같은 오류가 발생합니다. 그래서 테스트 단말기에 마켓에 올리 APK파일을 직접올려서 실행해야 합니다.