page.title=Preparing Your In-app Billing Application parent.title=Selling In-app Products parent.link=index.html trainingnavtop=true next.title=Establishing In-app Billing Products for Sale next.link=list-iab-products.html @jd:body
Implementing Freemium
Before you can start using the In-app Billing service, you need to add the library that contains the In-app Billing Version 3 API to your Android project. You also need to set the permissions for your application to communicate with Google Play. In addition, you need to establish a connection between your application and Google Play. You must also verify that the In-app Billing API version that you are using in your application is supported by Google Play.
In this training class, you use a reference implementation for the In-app Billing Version 3 API called the {@code TrivialDrive} sample application. The sample includes convenience classes to quickly set up the In-app Billing service, marshal and unmarshal data types, and handle In-app Billing requests from the main thread of your application.
To download the sample application, follow these steps:
Alternatively, you can use {@code git} to manually clone the repository from the Google Samples GitHub site.
The Google Play Developer Console is where you publish your In-app Billing application and manage the various digital products that are available for purchase from your application. When you create a new application entry in the Developer Console, it automatically generates a public license key for your application. You need this key to establish a trusted connection from your application to the Google Play servers. You need to generate this key only once per application, and you don’t need to repeat these steps when you update the APK file for your application.
To add your application to the Developer Console, follow these steps:
Your application should now appear in the list of applications in Developer Console.
To use the In-app Billing Version 3 features, you must add the {@code IInAppBillingService.aidl} file to your Android project. This Android Interface Definition Language (AIDL) file defines the interface to the Google Play service.
You can find the {@code IInAppBillingService.aidl} file in the provided sample app. To add the In-app Billing library to your project, follow the instructions below for a new or existing project.
To add the In-app Billing Version 3 library to a new project, follow these steps:
To add the In-app Billing Version 3 library to an existing project, follow these steps:
Your project should now contain the In-app Billing Version 3 library.
Your app needs to have permission to communicate request and response messages to the Google Play billing service. To give your app the necessary permission, add the following line in your {@code AndroidManifest.xml} manifest file:
<uses-permission android:name="com.android.vending.BILLING" />
To send In-app Billing requests to Google Play from your application, you must bind your Activity to the Google Play In-app Billing service. The sample includes convenience classes that handle the binding to the In-app Billing service, so you don’t have to manage the network connection directly.
To set up synchronous communication with Google Play, create an {@code IabHelper} instance in your activity's {@code onCreate} method, as shown in the following example. In the constructor, pass in the {@code Context} for the activity along with a string containing the public license key that was generated earlier by the Google Play Developer Console.
Security Recommendation: Google highly recommends that you do not hard-code the exact public license key string value as provided by Google Play. Instead, construct the whole public license key string at runtime from substrings or retrieve it from an encrypted store before passing it to the constructor. This approach makes it more difficult for malicious third parties to modify the public license key string in your APK file.
IabHelper mHelper; @Override public void onCreate(Bundle savedInstanceState) { // ... String base64EncodedPublicKey; // compute your public key and store it in base64EncodedPublicKey mHelper = new IabHelper(this, base64EncodedPublicKey); }
Next, perform the service binding by calling the {@code startSetup} method on the {@code IabHelper} instance that you created, as shown in the following example. Pass the method an {@code OnIabSetupFinishedListener} instance, which is called once the {@code IabHelper} completes the asynchronous setup operation. As part of the setup process, the {@code IabHelper} also checks if the In-app Billing Version 3 API is supported by Google Play. If the API version is not supported, or if an error occurs while establishing the service binding, the listener is notified and passed an {@code IabResult} object with the error message.
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { // Oh no, there was a problem. Log.d(TAG, "Problem setting up In-app Billing: " + result); } // Hooray, IAB is fully set up! } });
If the setup completed successfully, you can now use the {@code mHelper} reference to communicate with the Google Play service. When your application is launched, it is a good practice to query Google Play to find out what in-app items are owned by a user. This is covered further in the Query Purchased Items section.
Important: Remember to unbind from the In-app Billing service when you are done with your activity. If you don’t unbind, the open service connection could degrade device performance. To unbind and free your system resources, call the {@code IabHelper}'s {@code dispose} method when your {@code Activity} is destroyed, as shown in the following example.
@Override public void onDestroy() { super.onDestroy(); if (mHelper != null) mHelper.dispose(); mHelper = null; }