• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Testing In-app Billing
2parent.title=In-app Billing
3parent.link=index.html
4page.tags="inapp, billing, iap"
5@jd:body
6
7<div id="qv-wrapper">
8<div id="qv">
9  <h2>In this document</h2>
10  <ol>
11    <li><a href="#testing-purchases">Testing In-app Purchases</a></li>
12    <li><a href="#billing-testing-static">Testing with Static Responses</a></li>
13    <li><a href="#billing-testing-test">Setting Up for Test Purchases</a></li>
14    <li><a href="#draft_apps">Draft Apps are No Longer Supported</a></li>
15  </ol>
16  <h2>See also</h2>
17  <ol>
18    <li><a href="{@docRoot}google/play/billing/billing_overview.html">Overview of In-app
19    Billing</a></li>
20  <ol>
21</div>
22</div>
23
24<p>The Google Play Developer Console provides several tools that help you test your In-app Billing
25implementation:</p>
26
27<ul>
28<li>Test purchases, which let license-test users purchase your published in-app
29    items, without any actual charges to their accounts.</li>
30<li>Static billing responses from Google Play, for testing in early development</p>
31</ul>
32
33<p>To test in-app billing, you need to publish your app to an <a
34href="https://support.google.com/googleplay/android-developer/answer/3131213">alpha
35or beta channel in Google Play.</a></p>
36
37<p>After you publish an app to an alpha or beta channel, it can take a few hours
38for the app to be available for testers. The version code of an APK on a test device
39must match the version currently uploaded to the alpha or beta channel on Google Play.</p>
40
41<p class="caution"><strong>Important</strong>: To test in-app products or make in-app
42purchases in your alpha or beta channel app, each tester
43needs to <a href="https://support.google.com/googleplay/android-developer/answer/3131213">opt-in
44to your app’s alpha or beta test</a>. On your test’s opt-in URL, your
45testers will get an explanation of what it means to be a tester and a link to opt-in.</p>
46
47<p>You can test on any Android-powered hardware device running Android 1.6 or higher.
48The most current version of the Google Play application must be installed on the device.
49For general information about how to set up a device for use in
50developing Android applications, see <a href="{@docRoot}tools/device.html">Using Hardware
51Devices</a>.</p>
52
53<h2 id="testing-purchases">Testing In-app Purchases</h2>
54
55<p>When your In-app Billing implementation is ready, you can test purchasing of your in-app SKUs in two ways:</p>
56
57<ul>
58<li><strong>Test purchases</strong>, which let your selected license-test
59users purchase your in-app products without any resulting charges to the user.
60Test purchases can be used in alpha/beta releases only. </li>
61<li><strong>Real purchases</strong>, which let regular users make real purchases
62of your in-app products with actual charges to the user’s payment instruments.</li>
63</ul>
64
65<p>In either case, you need to publish your app to Google Play's
66<a href="https://support.google.com/googleplay/android-developer/answer/3131213">alpha
67  and beta release channels</a> to manage the users who can make purchases.</p>
68
69  <p>The sections below provide more detail about how to use these approaches for
70testing and validation. </p>
71
72
73
74<h3 id="test-purchases">Test Purchases (In-app Billing Sandbox)</h3>
75
76<p>Test purchases offer a secure, convenient way to enable larger-scale testing
77of your In-app Billing implementation during development or in preparation for
78launch. They let authorized user accounts make purchases of your in-app products
79through Google Play without incurring any actual charges to the user
80accounts.</p>
81
82<p>
83  Once authorized for testing access, those users can make purchases without
84  being charged. Test purchases don't have an <code>orderId</code> field, which
85  ensures that there are no actual charges to user accounts.
86</p>
87
88<p class="note">
89  <strong>Note:</strong> Test subscription purchases recur daily, regardless of
90  the product's subscription period.
91</p>
92
93
94<h4 id="setup">Setting up test purchases</h4>
95
96<p>It’s easy to set up test purchases&mdash;any user account can be chosen to be
97a test account, and any user of a test account can make test purchases with any
98available payment method (even though there’s no charge to the payment
99method).</p>
100
101<p>First, upload and publish in-app products that you want testers to be able to
102purchase. You can upload and publish in-app products in the Developer Console.
103Note that you can upload and publish your in-app items before you publish the
104APK itself.</p>
105
106<p>Next, create license test accounts for authorized users. In the Developer
107Console, go to <strong>Settings</strong> &gt; <strong>Account details</strong>,
108then in the License Testing section, add the addresses to <strong>Gmail accounts
109with testing access</strong> field. For more information, see <a
110href="#billing-testing-test">Setting Up for Test Purchases</a>.</p>
111
112<p>Once you’ve added the users as license tester accounts and saved the change,
113within 15 minutes those users can begin making test purchases of your in-app
114products.</p>
115
116<p class="caution"><strong>Important</strong>: After you publish your app
117to an alpha or beta channel, your testers need to <a
118href="https://support.google.com/googleplay/android-developer/answer/3131213">opt-in
119to your app’s alpha or beta test</a> using the provided opt-in URL before they
120can make test purchases. </p>
121
122<p class="note"><strong>Note</strong>: License test accounts
123must be on the user’s Android device. If the device has more than one
124account, the purchase will be made with the account that downloaded the app. If
125none of the accounts has downloaded the app, the purchase is made with the first
126account. Users can confirm the account that is making a purchase by expanding the
127purchase dialog.</p>
128
129<p class="note">
130  <strong>Note:</strong> Test purchases don't have an <code>orderId</code>
131  field. To track test purchases, you use the <code>purchaseToken</code> field
132  instead.
133</p>
134
135<h4 id="tp-account">Test purchases and developer account</h4>
136<p>Authorized license test accounts are associated with your developer account
137in Google Play, rather than with a specific APK or package name. Identifying an
138account as a test account enables it to purchase any of your in-app products
139without being charged. </p>
140
141<h4 id="purchase-flow">Details of purchase flow</h4>
142<p>During a test purchase, users can test the actual merchandising, purchase,
143and fulfillment flow in your app.  During purchase, the inapp item is displayed
144as a normal item with an actual price. However, Google Play marks test purchases
145with a notice across the center of the purchase dialog, for easy identification.
146</p>
147
148<h4 id="cancelling">Canceling completed test purchases</h4>
149<p>Google Play accumulates completed test purchases for each user but does not
150pass them on to financial processing.</p>
151
152<p>In some cases, you might want to manually cancel a test purchase to continue
153testing. To do so, open the app page in the Play Store. If the test purchase
154that you want to cancel is a subscription, you can also use the
155<a href="https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/cancel">
156{@code cancel()}</a> method of the Purchases.subscriptions API.
157</ul>
158
159<p class="caution">
160  <strong>Important:</strong> The
161  <a href="https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/refund">
162  {@code refund()}</a> and
163  <a href="https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/revoke">
164  {@code revoke()}</a> methods of the Purchases.subscriptions API don't support
165  test purchases.
166</p>
167
168
169<h3 id="transations">Testing with real transactions</h3>
170<p>As you prepare to launch an app that uses In-app Billing, you can make use of
171Google Play alpha/beta release options to do validation and load testing on your
172implementation before distributing the app to all of your users. </p>
173
174<p>With alpha/beta test groups, real users (chosen by you) can install your app
175from Google Play and test your in-app products. They can make real purchases
176that result in actual charges to their accounts, using any of their normal
177payment methods in Google Play to make purchases. Note that if you include test
178license accounts in your alpha and beta distribution groups, those users will
179only be able to make test purchases. </p>
180
181<p class="caution"><strong>Important</strong>: After you publish your app
182to an alpha or beta channel, your testers need to <a
183href="https://support.google.com/googleplay/android-developer/answer/3131213">opt-in
184to your app’s alpha or beta test</a> using the provided opt-in URL before they
185can make test purchases. </p>
186
187
188<h2 id="billing-testing-static">Testing with Static Responses</h2>
189
190<p>We recommend that you first test your In-app Billing implementation using static responses from
191Google Play. This enables you to verify that your application is handling the primary Google
192Play responses correctly and that your application is able to verify signatures correctly. You can
193do this even if the app hasn't been published yet.</p>
194
195<p>To test your implementation with static responses, you make an In-app Billing request using a
196special item that has a reserved product ID. Each reserved product ID returns a specific static
197response from Google Play. No money is transferred when you make In-app Billing requests with the
198reserved product IDs. Also, you cannot specify the form of payment when you make a billing request
199with a reserved product ID. Figure 1 shows the checkout flow for the reserved item that has the
200product ID android.test.purchased.</p>
201
202<p class="note">
203  <strong>Note:</strong> If you're testing subscription purchases, you must use
204  the product ID of an actual subscription, not a reserved product ID. To verify
205  that Google Play is processing the test subscription purchases correctly, you
206  should
207  <a href="/google/play/billing/billing/billing_admin.html#billing-testing-setup">set
208  up test accounts</a> for your app.
209</p>
210
211<img src="{@docRoot}images/billing_test_flow.png" height="381" id="figure1" />
212<p class="img-caption">
213  <strong>Figure 1.</strong>Purchase flow for the special reserved item android.test.purchased.
214</p>
215
216<p>You do not need to list the reserved products in your application's product list. Google Play
217already knows about the reserved product IDs. Also, you do not need to upload your application to
218the Developer Console to perform static response tests with the reserved product IDs. You can simply
219install your application on a device, log into the device, and make billing requests using the
220reserved product IDs.</p>
221
222<p class="note"><strong>Note:</strong> Previously you could test an app by
223uploading an unpublished "draft" version. This functionality is no longer
224supported. However, you can test your app with static responses even before you
225upload it to the Google Play store. For more information, see <a
226href="#draft_apps">Draft Apps are No Longer Supported</a>.
227
228<p>There are four reserved product IDs for testing static In-app Billing responses:</p>
229
230<ul>
231  <li><strong>android.test.purchased</strong>
232    <p>When you make an In-app Billing request with this product ID, Google Play responds as
233    though you successfully purchased an item. The response includes a JSON string, which contains
234    fake purchase information (for example, a fake order ID). In some cases, the JSON string is
235    signed and the response includes the signature so you can test your signature verification
236    implementation using these responses.</p>
237  </li>
238  <li><strong>android.test.canceled</strong>
239    <p>When you make an In-app Billing request with this product ID Google Play responds as
240    though the purchase was canceled. This can occur when an error is encountered in the order
241    process, such as an invalid credit card, or when you cancel a user's order before it is
242    charged.</p>
243  </li>
244  <li><strong>android.test.refunded</strong>
245    <p>When you make an In-app Billing request with this product ID, Google Play responds as
246    though the purchase was refunded. Refunds cannot be initiated through Google Play's in-app
247    billing service. Refunds must be initiated by you (the merchant). After you process a refund
248    request through your Google payments merchant account, a refund message is sent to your application by
249    Google Play. This occurs only when Google Play gets notification from Google payments that
250    a refund has been made. For more information about refunds, see <a
251    href="{@docRoot}google/play/billing/v2/api.html#billing-action-notify">Handling
252    IN_APP_NOTIFY messages</a> and <a
253    href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153485"
254    >In-app Billing Pricing</a>.</p>
255  </li>
256  <li><strong>android.test.item_unavailable</strong>
257    <p>When you make an In-app Billing request with this product ID, Google Play responds as
258    though the item being purchased was not listed in your application's product list.</p>
259  </li>
260</ul>
261
262<p>In some cases, the reserved items may return signed static responses, which
263lets you test signature verification in your application. The reserved items
264only return signed responses if the user running the application has a <a
265href="{@docRoot}distribute/googleplay/start.html">developer</a> or <a
266href="{@docRoot}google/play/billing/billing_admin.html#billing-testing-setup">test
267account.</a>
268
269<p>To make an In-app Billing request with a reserved product ID, you simply construct a normal
270<code>REQUEST_PURCHASE</code> request, but instead of using a real product ID from your
271application's product list you use one of the reserved product IDs.</p>
272
273<p>To test your application using the reserved product IDs, follow these steps:</p>
274
275<ol>
276  <li><strong>Install your application on an Android-powered device.</strong>
277    <p>You cannot use the emulator to test In-app Billing; you must install your application on a
278    device to test In-app Billing.</p>
279    <p>To learn how to install an application on a device, see <a
280    href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
281    device</a>.</p>
282  </li>
283  <li><strong>Sign in to your device with your developer account.</strong>
284    <p>You do not need to use a test account if you are testing only with the reserved product
285    IDs.</p>
286  </li>
287  <li><strong>Verify that your device is running a supported version of the Google Play
288  application or the MyApps application.</strong>
289    <p>If your device is running Android 3.0, In-app Billing requires version 5.0.12 (or higher) of
290    the MyApps application. If your device is running any other version of Android, In-app Billing
291    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
292    version of the Google Play application, see <a
293    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
294    Play</a>.</p>
295  </li>
296  <li><strong>Run your application and purchase the reserved product IDs.</strong></li>
297</ol>
298
299<p class="note"><strong>Note</strong>: Making In-app Billing requests with the reserved product IDs
300overrides the usual Google Play production system. When you send an In-app Billing request for a
301reserved product ID, the quality of service will not be comparable to the production
302environment.</p>
303
304<h2 id="billing-testing-test">Setting Up for Test Purchases</h2>
305
306<p>After you finish your static response testing, and you verify that signature verification is
307working in your application, you can test your In-app Billing implementation by making actual in-app
308purchases. Testing real in-app purchases enables you to test the end-to-end In-app Billing
309experience, including the actual purchases from Google Play and the actual checkout flow that
310users will experience in your application.</p>
311
312<p class="note"><strong>Note:</strong> You can do end-to-end testing of your app
313  by publishing it to an <a
314  href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">alpha
315  distribution channel</a>. This allows you to publish the app to the Google
316  Play store, but limit its availability to just the testers you designate. </p>
317
318<p>To test your In-app Billing implementation with actual in-app purchases, you will need to
319register at least one test account on the Google Play Developer Console. You cannot use your
320developer account to test the complete in-app purchase process because Google payments does not let
321you buy items from yourself. If you have not set up test accounts before, see <a
322href="{@docRoot}google/play/billing/billing_admin.html#billing-testing-setup">Setting up test
323accounts</a>.</p>
324
325<p>A test account can purchase an item in your product list only if the
326item is published.</p>
327
328<p>To test your In-app Billing implementation with actual purchases, follow these steps:</p>
329
330<ol>
331  <li><strong>Upload your application to the <a
332  href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">alpha
333  distribution channel</a> with the Developer Console.</strong>
334
335   <p class="note"><strong>Note:</strong> Previously you could test an app by
336    uploading an unpublished "draft" version. This functionality is no longer
337    supported; instead, you must publish it to the alpha or beta distribution
338    channel. For more information, see <a href="#draft_apps">Draft Apps are No
339    Longer Supported</a>.
340
341  </li>
342  <li><strong>Add items to the application's product list.</strong>
343    <p>Make sure that you publish the items (the application can remain unpublished). See <a
344    href="{@docRoot}google/play/billing/billing_admin.html#billing-catalog">Creating a product
345    list</a> to learn how to do this.</p>
346  </li>
347  <li><strong>Install your application on an Android-powered device.</strong>
348    <p>You cannot use the emulator to test In-app Billing; you must install your application on a
349    device to test In-app Billing.</p>
350    <p>To learn how to install an application on a device, see <a
351    href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
352    device</a>.</p>
353  </li>
354  <li><strong>Verify that your device is running a supported version of the Google Play
355  application or the MyApps application.</strong>
356    <p>If your device is running Android 3.0, In-app Billing requires version 5.0.12 (or higher) of
357    the MyApps application. If your device is running any other version of Android, In-app Billing
358    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
359    version of the Google Play application, see <a
360    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
361    Play</a>.</p>
362  </li>
363  <li><strong>Make in-app purchases in your application.</strong></li>
364</ol>
365
366<p class="note"><strong>Note:</strong> The only way to change the primary account on a device is to
367do a factory reset, making sure you log on with your primary account first.</p>
368
369<p>When you are finished testing your In-app Billing implementation, you are ready to
370publish your application on Google Play. You can follow the normal steps for <a
371href="{@docRoot}tools/publishing/preparing.html">preparing</a>, <a
372href="{@docRoot}tools/publishing/app-signing.html">signing</a>, and <a
373href="{@docRoot}distribute/tools/launch-checklist.html">publishing on Google Play</a>.
374</p>
375
376<h2 id="draft_apps">Draft Apps are No Longer Supported</h2>
377
378<p>Previously, you could publish a "draft" version of your app for testing. This
379functionality is no longer supported. Instead, there are two ways you can test
380how a pre-release app functions on the Google Play store:</p>
381
382<ul>
383
384  <li>You can publish an app to the <a
385  href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">alpha
386  or beta distribution channels</a>. This makes the app available on the Google
387  Play store, but only to the testers you put on a "whitelist".</li>
388
389  <li>In a few cases, you can test Google Play functionality with an unpublished
390  app. For example, you can test an unpublished app's in-app billing support by
391  using <a
392  href="{@docRoot}google/play/billing/billing_testing.html#billing-testing-static">static
393  responses</a>, special reserved product IDs that always return a specific
394  result (like "purchased" or "refunded").</li>
395
396</ul>
397