title: What is latest Google In-app Billing version?
body: <p>I have read the artical <a href="http://www.androiddocs.com/training/in-app-billing/preparing-iab-app.html#GetSample" rel="nofollow noreferrer">http://www.androiddocs.com/training/in-app-billing/preparing-iab-app.html#GetSample</a></p>
  
  <p>1:  The following IInAppBillingService.aidl is from a project, are you sure this code is for  In-app Billing version 3 ?</p>
  
  <p>2:  How to "Download the Sample Application"</p>
  
  <p>I can't find Google Play Billing Library in Android Studio 3.2.1 Android SDK Manager, you can see the following image.</p>
  
  <p>3:  Is the latest Google In-app Billing version 3 ?</p>
  
  <p>4:  Can I find the version number in the helper classes in the /util of directory of the TrivialDrive sample ?</p>
  
  <p>5:  Is the helper classes in the /util of directory of the TrivialDrive sample Java, is there a Kotlin code of the helper classes ?</p>
  
  <p>6:  Is there a Kotlin sample code for  In-app Billing Version 3 API ?</p>
  
  <p><strong>Document</strong></p>
  
  <p><a href="https://i.stack.imgur.com/k0Piv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/k0Piv.png" alt="enter image description here"></a></p>
  
  <p><strong>Image</strong></p>
  
  <p><a href="https://i.stack.imgur.com/EV2Ms.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/EV2Ms.png" alt="enter image description here"></a></p>
  
  <p><strong>IInAppBillingService.aidl</strong></p>
  
  <pre><code>/*
   * Copyright (C) 2012 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.vending.billing;
  
  import android.os.Bundle;
  
  /**
   * InAppBillingService is the service that provides in-app billing version 3 and beyond.
   * This service provides the following features:
   * 1. Provides a new API to get details of in-app items published for the app including
   *    price, type, title and description.
   * 2. The purchase flow is synchronous and purchase information is available immediately
   *    after it completes.
   * 3. Purchase information of in-app purchases is maintained within the Google Play system
   *    till the purchase is consumed.
   * 4. An API to consume a purchase of an inapp item. All purchases of one-time
   *    in-app items are consumable and thereafter can be purchased again.
   * 5. An API to get current purchases of the user immediately. This will not contain any
   *    consumed purchases.
   *
   * All calls will give a response code with the following possible values
   * RESULT_OK = 0 - success
   * RESULT_USER_CANCELED = 1 - user pressed back or canceled a dialog
   * RESULT_BILLING_UNAVAILABLE = 3 - this billing API version is not supported for the type requested
   * RESULT_ITEM_UNAVAILABLE = 4 - requested SKU is not available for purchase
   * RESULT_DEVELOPER_ERROR = 5 - invalid arguments provided to the API
   * RESULT_ERROR = 6 - Fatal error during the API action
   * RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned
   * RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned
   */
  interface IInAppBillingService {
      /**
       * Checks support for the requested billing API version, package and in-app type.
       * Minimum API version supported by this interface is 3.
       * @param apiVersion the billing version which the app is using
       * @param packageName the package name of the calling app
       * @param type type of the in-app item being purchased "inapp" for one-time purchases
       *        and "subs" for subscription.
       * @return RESULT_OK(0) on success, corresponding result code on failures
       */
      int isBillingSupported(int apiVersion, String packageName, String type);
  
      /**
       * Provides details of a list of SKUs
       * Given a list of SKUs of a valid type in the skusBundle, this returns a bundle
       * with a list JSON strings containing the productId, price, title and description.
       * This API can be called with a maximum of 20 SKUs.
       * @param apiVersion billing API version that the Third-party is using
       * @param packageName the package name of the calling app
       * @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST"
       * @return Bundle containing the following key-value pairs
       *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
       *              failure as listed above.
       *         "DETAILS_LIST" with a StringArrayList containing purchase information
       *              in JSON format similar to:
       *              '{ "productId" : "exampleSku", "type" : "inapp", "price" : "$5.00",
       *                 "title : "Example Title", "description" : "This is an example description" }'
       */
      Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle);
  
      /**
       * Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU,
       * the type, a unique purchase token and an optional developer payload.
       * @param apiVersion billing API version that the app is using
       * @param packageName package name of the calling app
       * @param sku the SKU of the in-app item as published in the developer console
       * @param type the type of the in-app item ("inapp" for one-time purchases
       *        and "subs" for subscription).
       * @param developerPayload optional argument to be sent back with the purchase information
       * @return Bundle containing the following key-value pairs
       *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
       *              failure as listed above.
       *         "BUY_INTENT" - PendingIntent to start the purchase flow
       *
       * The Pending intent should be launched with startIntentSenderForResult. When purchase flow
       * has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
       * If the purchase is successful, the result data will contain the following key-value pairs
       *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
       *              failure as listed above.
       *         "INAPP_PURCHASE_DATA" - String in JSON format similar to
       *              '{"orderId":"12999763169054705758.1371079406387615",
       *                "packageName":"com.example.app",
       *                "productId":"exampleSku",
       *                "purchaseTime":1345678900000,
       *                "purchaseToken" : "122333444455555",
       *                "developerPayload":"example developer payload" }'
       *         "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
       *                                  was signed with the private key of the developer
       *                                  TODO: change this to app-specific keys.
       */
      Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type,
          String developerPayload);
  
      /**
       * Returns the current SKUs owned by the user of the type and package name specified along with
       * purchase information and a signature of the data to be validated.
       * This will return all SKUs that have been purchased in V3 and managed items purchased using
       * V1 and V2 that have not been consumed.
       * @param apiVersion billing API version that the app is using
       * @param packageName package name of the calling app
       * @param type the type of the in-app items being requested
       *        ("inapp" for one-time purchases and "subs" for subscription).
       * @param continuationToken to be set as null for the first call, if the number of owned
       *        skus are too many, a continuationToken is returned in the response bundle.
       *        This method can be called again with the continuation token to get the next set of
       *        owned skus.
       * @return Bundle containing the following key-value pairs
       *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
       *              failure as listed above.
       *         "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs
       *         "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information
       *         "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures
       *                                      of the purchase information
       *         "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the
       *                                      next set of in-app purchases. Only set if the
       *                                      user has more owned skus than the current list.
       */
      Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken);
  
      /**
       * Consume the last purchase of the given SKU. This will result in this item being removed
       * from all subsequent responses to getPurchases() and allow re-purchase of this item.
       * @param apiVersion billing API version that the app is using
       * @param packageName package name of the calling app
       * @param purchaseToken token in the purchase information JSON that identifies the purchase
       *        to be consumed
       * @return 0 if consumption succeeded. Appropriate error values for failures.
       */
      int consumePurchase(int apiVersion, String packageName, String purchaseToken);
  }
  </code></pre>