본문 바로가기

Development Note/JAVA

[안드로이드] 인앱결제 (In-App Billing, v3) IllegalArgumentException 해결방법

안드로이드 인앱 결제 최신버전(v3)을 앱에 적용하면 액티비티를 종료할 때 다음과 같은 에러 메시지를 볼 수 있습니다.



java.lang.RuntimeException: Unable to destroy activity
 {com.package.application/com.package.applicationname.MainActivity}:
 java.lang.IllegalArgumentException: Service not registered:
 com.package.applicationname.IabHelper$1@b1d79398
 //가독 편의성을 위해서 줄바꿈을 했습니다




해당 IllegalArgumentException은 인앱결제가 적용된 앱 내의 IabHelper.java 클래스를 수정해주면 해결됩니다. IapHelper.java 클래스 내에서 dispose() 메소드 내의 코드를 수정 해 주어야 합니다. 아래 코드의 7열부터 11열까지를 참고하시면 되겠습니다.


    public void dispose() {
        logDebug("Disposing.");
        mSetupDone = false;
        if (mServiceConn != null) {
            logDebug("Unbinding from service.");

         // if (mContext != null) mContext.unbindService(mServiceConn);
         // 원래 코드는 위와 같을 것입니다만 이 if문에 mService != null 을 추가 해 주면 됩니다.

            if (mContext != null && mService != null) mContext.unbindService(mServiceConn);
         // 이렇게 수정 해 주시면 됩니다.

        }
        mDisposed = true;
        mContext = null;
        mServiceConn = null;
        mService = null;
        mPurchaseListener = null;
    }


위 코드와 같이 dispose() 메소드를 수정해주고 나면 더 이상 IllegalArgumentException이 발생하지 않게 됩니다.