While implementing s i found out that the process of implementing it was not that complicated, but there were some hidden facts that took me time to figure out. And as there is no much examples out there about this case i decided to write an article that may be helpful for someone dealing with . In App Subscription In App Billing Play Store First of all you must have a for implementing and testing In App related cases**.** Unfortunately you won’t be able to run InApp Subscription Google Play Developer Account without publishing a signed APK (at least on Beta or Alpha testing) on Play Store . License Key For initializing you will need a . For getting it you must create an application from play store by clicking on filling required fields and clicking on In App Billing public key Add new Application, Upload APK: This will redirect you to the newly created application page (You can fill later on the details for app publishing). Navigate to and copy as we will need it later on: Services & APIs YOUR LICENSE KEY FOR THIS APPLICATION Publishing APK Than you have to upload a signed APK in Alpha or Beta Testing_(in this example i use Alpha Testing)_ by clicking on APK tab > Alpha Testing > Upload your first APK to Alpha: Google will process the APK and . it will take some hours till it is published You must keep the version of apk in your device same with the one that is published, otherwise the In App Billing won’t work Creating a Subscription After the apk is published, you will be able to create a : Subscription (Product) You create a product if app is cannot unpublished Clicking on Add new product will show a popup screen asking you to write details of your product: As we are going to create a subscription, we choose Product ID is a unique id to identify your product. When you want to consume the product from play store, you will use this unique id to identify it. Subscription tab. After creating a product, a page for filling the details of the product will be shown. Fill them based on your needs and now you are ready to go. SETUP provides an easy to use library that is able to handle the payment,subscriptions and querying tasks. You can download it from or from the Google here {SDK_PATH}\extras\google\play_billing\samples. You must create a folder under called and inside it create a package named as: Inside that package you will have to put file found in the downloaded sample or locally from the above told google extras path. You will also have to copy the other files in your projects package . At the time i wrote there were 8 files, in case you forget any: main aidl com.android.vending.billing. AIDL (IInAppBillingService.aidl) (it doesnt matter where, you can create a purchaseUtils package and put inside it) {IabBroadcastReceiver, IabException, IabHelper, IabResult, Inventory, Purchase, Security and SkuDetails}. Do not forget to add BILLING permissions to AndroidManifest.xml: <uses-permission android:name=”com.android.vending.BILLING” /> Initialize Later on you need to create an instance and initialize In App Billing on or wherever it satisfies your needs: IabHelper OnCreate() IabHelper iabHelper = new IabHelper(context, );iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {@Overridepublic void onIabSetupFinished(IabResult result) {if (result.isFailure()) {Log. ("YOUR_TAG", "Problem setting up In-app Billing: " + result);dispose();}}}); base64EncodedPublicKey d /*** Method for releasing resources (dispose of object)*/public void dispose() {if (iabHelper != null) {try {iabHelper.dispose();} catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}iabHelper = null;}} It is a good behavior you also enable (optionally you can give a tag name also) as it will help you debug faster: debug logs iabHelper.enableDebugLogging(true, "YOUR_TAG"); Launch Subscription To launch Subscription panel we have to call You need to provide the you wrote when you created a new Product and a so it can catch it method: launchSubscriptionPurchaseFlow() method. Product id (subscriptionType) REQUEST_CODE (it can be any random integer) onActivityResult() try {iabHelper.launchSubscriptionPurchaseFlow((Activity) context,subscriptionType, ,new IabHelper.OnIabPurchaseFinishedListener() {@Overridepublic void onIabPurchaseFinished(IabResult result, Purchase info) {if (result.isFailure()) {Log. ("TEST", "Error purchasing: " + result);return;}if (info.getSku().equals(subscriptionType)) {if(subscriptionFinishedListener != null){subscriptionFinishedListener.onSuccess();}Log. ("TEST", "Thank you for upgrading to premium!");}}},payload);} catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();} REQUEST_CODE e e then you handle it with a help of method: handleActivityResult() @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if (!iabHelper.handleActivityResult(requestCode, resultCode, data)) {super.onActivityResult(requestCode, resultCode, data);}} Consume Subscription Details You can also get subscription details for displaying or verifying them through method. It queries details asynchronously, hence it is safe to call it from UI thread: queryInventoryAsync() try {iabHelper.queryInventoryAsync(true, null, skuIdsList, new IabHelper.QueryInventoryFinishedListener() {@Overridepublic void onQueryInventoryFinished(IabResult result, Inventory inventory) {if (result.isFailure()) {Log. ("TEST", "Problem querying inventory: " + result);dispose();return;} d for (String skuId : skuIdsList) { SkuDetails sku = inventory.getSkuDetails(skuId); if (sku.getSku().equals(skuId)) { Log._e_("YOUR\_TAG", "Product Price:" + sku.getPrice()); } } } });} catch (IabHelper.IabAsyncInProgressException e) {Log. ("TEST", "EXCEPTION:" + e.getMessage());} e skuIdsList is a List of Strings where multiple Product Ids are stored Test For testing you will need to add your testing email on located on tab of Google Play Account Details. This way you won’t get charged when you subscribe: LICENSE TESTING Settings Note that you cannot subscribe with the same Developer Account you used to publish the app. You must open your play store on device with different account Thats all! tl;dr; i wrote about In App Subscription. You can include that in your app. Than you can initialize it’s instance in method or somewhere you find it most suitable for your case: Here is a gist SubscriptionUtil.class onCreate() subscriptionUtil = new SubscriptionUtil(context); release resources on : onDestroy() @Overridepublic void onDestroy() {super.onDestroy();if (subscriptionUtil != null) {subscriptionUtil.dispose();}} handle requests on : onActivityResult() @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if (!subscriptionUtil.getIabHelper().handleActivityResult(requestCode, resultCode, data)) {super.onActivityResult(requestCode, resultCode, data);}} If you want to consume subscription types, create a list with of those subscriptions you want to consume and send them as request using method: Product Ids getSkuDetailsList() ArrayList<String> skuRequestList = new ArrayList<>();skuRequest.add("first_product_id");skuRequest.add("second_product_id"); subscriptionUtil.getSkuDetailsList(skuRequestList, new SubscriptionUtil.SubscriptionInventoryListener() {@Overridepublic void onQueryInventoryFinished(ArrayList<SkuDetails> skuList) {//Do whatever you want with list of SkuDetails}}); If you want to proceed with subscription, you can send an object of that subscription(SkuDetails object) to method: initSubscription() subscriptionUtil.initSubscription(skuDetailsObject.getSku(), new SubscriptionUtil.SubscriptionFinishedListener() {@Overridepublic void onSuccess() {// }}); Do whatever you want on subscription success And you are good to go :)