• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=In-app Billing API
2parent.title=In-app Billing
3parent.link=index.html
4page.tags="billing, inapp, iap"
5@jd:body
6
7<div id="qv-wrapper">
8<div id="qv">
9
10  <h2>Topics</h2>
11  <ol>
12    <li><a href="#producttypes">Product Types</a>
13       <ol>
14       <li><a href="#managed">Managed In-app Products</a></li>
15       <li><a href="#subs">Subscriptions</a></li>
16       </ol>
17    </li>
18    <li><a href="#purchase">Purchasing Items</a></li>
19    <li><a href="#consume">Consuming In-app Products</a>
20       <ol>
21       <li><a href="#consumetypes">Non-consumable and Consumable In-app Products</a></li>
22       <li><a href="#managingconsumables">Managing Consumable Purchases</a></li>
23       </ol>
24    </li>
25    <li><a href="#caching">Local Caching</a></li>
26  </ol>
27
28  <h2>Reference</h2>
29  <ol>
30    <li><a href="{@docRoot}google/play/billing/billing_reference.html">In-app Billing
31    Reference (V3)</a></li>
32  </ol>
33
34 <h2>See also</h2>
35  <ol>
36    <li><a href="{@docRoot}training/in-app-billing/index.html">Selling In-app Products</a></li>
37  </ol>
38</div>
39</div>
40
41<p>
42  The In-app Billing Version 3 API makes it easier for you to integrate In-app
43  Billing into your applications. The features in this version include improved
44  synchronous purchase flow, APIs to let you easily track ownership of
45  consumable goods, and local caching of in-app purchase data.
46</p>
47
48<h2 id="producttypes">Product Types</h2>
49
50<p>
51  You define your products using the Google Play Developer Console, including
52  product type, SKU, price, description, and so on. For more information, see
53  <a href="{@docRoot}google/play/billing/billing_admin.html">Administering
54  In-app Billing</a>. The Version 3 API supports managed in-app products and
55  subscriptions.
56</p>
57
58<h3 id="managed">Managed In-app Products</h3>
59
60<p>
61  Managed in-app products are items that have their ownership information
62  tracked and managed by Google Play. When a user purchases a managed in-app
63  item, Google Play stores the purchase information for each item on a per-user
64  basis. This enables you to later query Google Play at any time to restore the
65  state of the items a specific user has purchased. This information is
66  persistent on the Google Play servers even if the user uninstalls the
67  application or if they change devices.
68</p>
69
70<p>
71  If you are using the Version 3 API, you can also consume managed items within
72  your application. You would typically implement consumption for items that
73  can be purchased multiple times (such as in-game currency, fuel, or magic
74  spells). Once purchased, a managed item cannot be purchased again until you
75  consume the item, by sending a consumption request to Google Play. To learn
76  more about in-app product consumption, see <a href="#consume">Consuming
77  Items</a>.
78</p>
79
80<h3 id="subs">Subscriptions</h3>
81
82<p>
83  A subscription is a product type offered in In-app Billing that lets you sell
84  content, services, or features to users from inside your app with recurring
85  monthly or annual billing. You can sell subscriptions to almost any type of
86  digital content, from any type of app or game. To understand how
87  subscriptions work, see <a href=
88  "{@docRoot}google/play/billing/billing_subscriptions.html">In-app Billing
89  Subscriptions</a>.
90</p>
91
92<p>
93  With the Version 3 API, you can use the same purchase flow for buying
94  subscriptions and retrieving subscription purchase information as with in-app
95  products. For a code example, see <a href=
96  "{@docRoot}google/play/billing/billing_integrate.html#Subs">Implementing
97  Subscriptions</a>.
98</p>
99
100<p class="caution">
101  <strong>Important</strong>: Unlike in-app products, subscriptions cannot be
102  consumed.
103</p>
104
105<h2 id="purchase">Purchasing Items</h2>
106
107<div class="figure" style="width:430px">
108<img src="{@docRoot}images/in-app-billing/v3/iab_v3_purchase_flow.png" id="figure1" height="530"/>
109<p class="img-caption">
110  <strong>Figure 1.</strong> The basic sequence for a purchase request.
111</p>
112</div>
113
114<p>A typical purchase flow with the Version 3 API is as follows:</p>
115
116<ol>
117  <li>Your application sends a {@code isBillingSupported} request to Google
118  Play to determine that the target version of the In-app Billing API that you
119  are using is supported.
120  </li>
121
122  <li>When your application starts or user logs in, it's good practice to check
123  with Google Play to determine what items are owned by the user. To query the
124  user's in-app purchases, send a {@code getPurchases} request. If the request
125  is successful, Google Play returns a {@code Bundle} containing a list of
126  product IDs of the purchased items, a list of the individual purchase
127  details, and a list of the signatures for the purchases.
128  </li>
129
130  <li>Usually, you'll want to inform the user of the products that are
131  available for purchase. To query the details of the in-app products that you
132  defined in Google Play, your application can send a {@code getSkuDetails}
133  request. You must specify a list of product IDs in the query request. If the
134  request is successful, Google Play returns a {@code Bundle} containing
135  product details including the product’s price, title, description, and the
136  purchase type.
137  </li>
138
139  <li>If an in-app product is not owned by the user, you can initiate a
140  purchase for it. To start a purchase request, your application sends a {@code
141  getBuyIntent} request, specifying the product ID of the item to purchase,
142  along with other parameters. You should record the product ID when you create
143  a new in-app product in the Developer Console.
144    <ol type="a">
145      <li>Google Play returns a {@code Bundle} that contains a {@code
146      PendingIntent} which your application uses to start the checkout UI for
147      the purchase.
148      </li>
149
150      <li>Your application launches the pending intent by calling the {@code
151      startIntentSenderForResult} method.
152      </li>
153
154      <li>When the checkout flow finishes (that is, the user successfully
155      purchases the item or cancels the purchase), Google Play sends a response
156      {@code Intent} to your {@code onActivityResult} method. The result code
157      of the {@code onActivityResult} has a result code that indicates whether
158      the purchase was successful or canceled. The response {@code Intent}
159      contains information about the purchased item, including a {@code
160      purchaseToken} String that is generated by Google Play to uniquely
161      identify this purchase transaction. The {@code Intent} also contains the
162      signature of the purchase, signed with your private developer key.
163      </li>
164    </ol>
165  </li>
166</ol>
167
168<p>
169  To learn more about the Version 3 API calls and server responses, see
170  <a href="{@docRoot}google/play/billing/billing_reference.html">In-app Billing
171  Reference</a>.
172</p>
173
174<h2 id="consume">Consuming In-app Products</h2>
175
176<p>
177  You can use the consumption mechanism to track the user's ownership of in-app
178  products.
179</p>
180
181<p>
182  In Version 3, all in-app products are managed. This means that the user's
183  ownership of all in-app item purchases is maintained by Google Play, and your
184  application can query the user's purchase information when needed. When the
185  user successfully purchases an in-app product, that purchase is recorded in
186  Google Play. Once an in-app product is purchased, it is considered to be
187  "owned". In-app products in the "owned" state cannot be purchased from Google
188  Play. You must send a consumption request for the "owned" in-app product
189  before Google Play makes it available for purchase again. Consuming the
190  in-app product reverts it to the "unowned" state, and discards the previous
191  purchase data.
192</p>
193
194<div class="figure" style="width:420px">
195<img src="{@docRoot}images/in-app-billing/v3/iab_v3_consumption_flow.png"
196    id="figure2" height="300"/>
197<p class="img-caption">
198  <strong>Figure 2.</strong> The basic sequence for a consumption request.
199</p>
200</div>
201
202<p>
203  To retrieve the list of product's owned by the user, your application sends a
204  {@code getPurchases} call to Google Play. Your application can make a
205  consumption request by sending a {@code consumePurchase} call. In the request
206  argument, you must specify the in-app product's unique {@code purchaseToken}
207  String that you obtained from Google Play when it was purchased. Google Play
208  returns a status code indicating if the consumption was recorded
209  successfully.
210</p>
211
212<h3 id="consumetypes">Non-consumable and Consumable In-app Products</h3>
213
214<p>
215  It's up to you to decide if you want to handle your in-app products as
216  non-consumable or consumable items.
217</p>
218
219<dl>
220  <dt>
221    Non-consumable Items
222  </dt>
223
224  <dd>
225    Typically, you would not implement consumption for in-app products that can
226    only be purchased once in your application and provide a permanent benefit.
227    Once purchased, these items will be permanently associated to the user's
228    Google account. An example of a non-consumable in-app product is a premium
229    upgrade or a level pack.
230  </dd>
231
232  <dt>
233    Consumable items
234  </dt>
235
236  <dd>
237    In contrast, you can implement consumption for items that can be made
238    available for purchase multiple times. Typically, these items provide
239    certain temporary effects. For example, the user's in-game character might
240    gain life points or gain extra gold coins in their inventory. Dispensing
241    the benefits or effects of the purchased item in your application is called
242    <em>provisioning</em> the in-app product. You are responsible for
243    controlling and tracking how in-app products are provisioned to the users.
244    <p class="note">
245      <strong>Important:</strong> Before provisioning the consumable in-app
246      product in your application, you must send a consumption request to
247      Google Play and receive a successful response indicating that the
248      consumption was recorded.
249    </p>
250  </dd>
251</dl>
252
253<h3 id="managingconsumables">Managing consumable purchases in your application</h3>
254<p>Here is the basic flow for purchasing a consumable in-app product:</p>
255
256<ol>
257  <li>Launch a purchase flow with a {@code getBuyIntent} call
258  </li>
259
260  <li>Get a response {@code Bundle}from Google Play indicating if the purchase
261  completed successfully.
262  </li>
263
264  <li>If the purchase was successful, consume the purchase by making a {@code
265  consumePurchase} call.
266  </li>
267
268  <li>Get a response code from Google Play indicating if the consumption
269  completed successfully.
270  </li>
271
272  <li>If the consumption was successful, provision the product in your
273  application.
274  </li>
275</ol>
276
277<p>
278  Subsequently, when the user starts up or logs in to your application, you
279  should check if the user owns any outstanding consumable in-app products; if
280  so, make sure to consume and provision those items. Here's the recommended
281  application startup flow if you implement consumable in-app products in your
282  application:
283</p>
284
285<ol>
286  <li>Send a {@code getPurchases} request to query the owned in-app products
287  for the user.
288  </li>
289
290  <li>If there are any consumable in-app products, consume the items by calling
291  {@code consumePurchase}. This step is necessary because the application might
292  have completed the purchase order for the consumable item, but stopped or got
293  disconnected before the application had the chance to send a consumption
294  request.
295  </li>
296
297  <li>Get a response code from Google Play indicating if the consumption
298  completed successfully.
299  </li>
300
301  <li>If the consumption was successful, provision the product in your
302  application.
303  </li>
304</ol>
305
306<h2 id="caching">Local Caching</h2>
307
308<p>
309  Because the Google Play client now caches In-app Billing information locally
310  on the device, you can use the Version 3 API to query for this information
311  more frequently, for example through a {@code getPurchases} call. Unlike with
312  previous versions of the API, many Version 3 API calls will be serviced
313  through cache lookups instead of through a network connection to Google Play,
314  which significantly speeds up the API's response time.
315</p>
316