1. What is it and why is it needed?

In-app purchase is a service for buying virtual goods within an application (for example, game currency, new levels, game items, etc.). It is used mainly in games, in those cases when the question arises about the need to earn money on your creation, but you don’t really want to distribute it for a fee (or it makes no sense).

2. In-app purchase in android applications

When I was faced with the need to use in-app purchase in the game under development, it was very difficult to find detailed Russian-language information on how to tie this service to my game. Some services were described in one of our previous articles, but I would like to show my new vision on this issue. Therefore, I decided to write a small manual on how to connect the service to the application.

To begin with, it would be nice to figure out how all of this works.

It is assumed that you already have a developer account on the Android Market.

In order to work with the shopping system inside the application, we need a file called IMarketBillingService.aidl. You can find it in the example application for working with in-app purchase, which in turn is a downloadable component of the Android SDK. Launch the Android SDK and AVD Manager and select Available Packages. Next, you will need to select Third party add-ons -> Google Inc. add-ons -> Google Market Billing package.

Now you need to copy the IMarketBillingService.aidl file to your project from the downloaded example. It is important that it is in com.android.vending.billing. After that, in the manifest, add the extension: <uses-permission android: name = “com.android.vending.BILLING” />.

In the application example, in addition to the file described above, there are also several classes implemented for working with the payment system. Copy them to your project.

What is each of them:

In the Security class, look for the line:

and enter here your PublicKey obtained when registering an account on the Android Market.

In the Dungeons class, we look for a list of products that are supposed to be sold, and change them to our own. At the same time, the goods must be uploaded to the Android Market and published (the application itself is not required to be published – if it is tested, however, do not forget to add yourself (or someone else) to the developers (done in the profile settings)). Next, we add the interface and, in general, the application is ready.

However, you should take care of security. The best way to ensure shopping safety is to use the appropriate service on the server. After the user has completed the purchase of goods, the market will send a JSON line with information about the purchased goods:

{“nonce”: 1836535032137741465,


{“notificationId”: “android.test.purchased”,

“orderId”: “transactionId.android.test.purchased”,

“packageName”: “com.example.dungeons”,

“productId”: “android.test.purchased”,

“developerPayload”: “bGoa + V7g / yqDXvKRqq + JTFn4uQZbPiQJo4pf9RzJ”,

“purchaseTime”: 1290114783411,

“purchaseState”: 0}


and signature to authenticate the request.

On the server side of the application, you need to check the returned string using the signature and your key (RSA encryption) and return the verification result to the client. There is a small open library written in php for this, I used it.


  • Android
  • in-app billing
  • in-app purchases
  • BillingReceiver – receives all asynchronous responses from the market and sends them further to BillingService;
  • BillingService – sends requests to the market;
    Consts – contains all the constants of the sample application;
    Dungeons – provides a UI and displays the history of completed purchases;
    PurchaseDatabase – a local database;
    PurchaseObserver – monitoring changes related to purchases;
    ResponseHandler – updating the database and UI;
    Security – security;

Base64 and Base64DecoderException – encoding from the binary system to base64. Required for the functioning of the Security class.