summaryrefslogtreecommitdiffstats
path: root/docs/html/google/play/billing/billing_testing.jd
blob: 241d45ed96db8d966e70931a80fc5f79ddc01576 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
page.title=Testing In-app Billing
parent.title=In-app Billing
parent.link=index.html
@jd:body

<div id="qv-wrapper">
<div id="qv">
  <h2>In this document</h2>
  <ol>
    <li><a href="#billing-testing-static">Testing in-app purchases with static responses</a></li>
    <li><a href="#billing-testing-real">Testing in-app purchases using your own product IDs</a></li>
  </ol>
  <h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}google/play/billing/billing_overview.html">Overview of In-app
    Billing</a></li>
  <ol>
</div>
</div>

<p>The Google Play Developer Console provides several tools that help you test your In-app Billing
implementation before it is published. You can use these tools to create test accounts and purchase
special reserved items that send static billing responses to your application.</p>

<p>To test In-app Billing in an application you must install the application on an Android-powered
device. You cannot use the Android emulator to test In-app Billing.  The device you use for testing
must run a standard version of the Android 1.6 or later platform (API level 4 or higher), and have
the most current version of the Google Play application installed. If a device is not running the
most current Google Play application, your application won't be able to send In-app Billing
requests to Google Play. For general information about how to set up a device for use in
developing Android applications, see <a href="{@docRoot}tools/device.html">Using Hardware
Devices</a>.</p>

<p>The following section shows you how to set up and use the In-app Billing test tools.</p>

<h2 id="billing-testing-static">Testing in-app purchases with static responses</h2>

<p>We recommend that you first test your In-app Billing implementation using static responses from
Google Play. This enables you to verify that your application is handling the primary Google
Play responses correctly and that your application is able to verify signatures correctly.</p>

<p>To test your implementation with static responses, you make an In-app Billing request using a
special item that has a reserved product ID. Each reserved product ID returns a specific static
response from Google Play. No money is transferred when you make In-app Billing requests with the
reserved product IDs. Also, you cannot specify the form of payment when you make a billing request
with a reserved product ID. Figure 1 shows the checkout flow for the reserved item that has the
product ID android.test.purchased.</p>

<img src="{@docRoot}images/billing_test_flow.png" height="381" id="figure1" />
<p class="img-caption">
  <strong>Figure 1.</strong>Wallet flow for the special reserved item android.test.purchased.
</p>

<p>You do not need to list the reserved products in your application's product list. Google Play
already knows about the reserved product IDs. Also, you do not need to upload your application to
the Developer Console to perform static response tests with the reserved product IDs. You can simply
install your application on a device, log into the device, and make billing requests using the
reserved product IDs.</p>

<p>There are four reserved product IDs for testing static In-app Billing responses:</p>

<ul>
  <li><strong>android.test.purchased</strong>
    <p>When you make an In-app Billing request with this product ID, Google Play responds as
    though you successfully purchased an item. The response includes a JSON string, which contains
    fake purchase information (for example, a fake order ID). In some cases, the JSON string is
    signed and the response includes the signature so you can test your signature verification
    implementation using these responses.</p>
  </li>
  <li><strong>android.test.canceled</strong>
    <p>When you make an In-app Billing request with this product ID Google Play responds as
    though the purchase was canceled. This can occur when an error is encountered in the order
    process, such as an invalid credit card, or when you cancel a user's order before it is
    charged.</p>
  </li>
  <li><strong>android.test.refunded</strong>
    <p>When you make an In-app Billing request with this product ID, Google Play responds as
    though the purchase was refunded. Refunds cannot be initiated through Google Play's in-app
    billing service. Refunds must be initiated by you (the merchant). After you process a refund
    request through your Google Wallet merchant account, a refund message is sent to your application by
    Google Play. This occurs only when Google Play gets notification from Google Wallet that
    a refund has been made. For more information about refunds, see <a href="{@docRoot}google/play/billing/v2/api.html#billing-action-notify">Handling
IN_APP_NOTIFY messages</a> and <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153485">In-app Billing
Pricing</a>.</p>
  </li>
  <li><strong>android.test.item_unavailable</strong>
    <p>When you make an In-app Billing request with this product ID, Google Play responds as
    though the item being purchased was not listed in your application's product list.</p>
  </li>
</ul>

<p>In some cases, the reserved items may return signed static responses, which lets you test
signature verification in your application. To test signature verification with the special reserved
product IDs, you may need to set up <a
href="{@docRoot}google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a> or
upload your application as a unpublished draft application. Table 1 shows you the conditions under
which static responses are signed.</p>

<p class="table-caption" id="static-responses-table"><strong>Table 1.</strong>
Conditions under which static responses are signed.</p>

<table>
<tr>
<th>Application ever been published?</th>
<th>Draft application uploaded and unpublished?</th>
<th>User who is running the application</th>
<th>Static response signature</th>
</tr>

<tr>
<td>No</td>
<td>No</td>
<td>Any</td>
<td>Unsigned</td>
</tr>

<tr>
<td>No</td>
<td>No</td>
<td>Developer</td>
<td>Signed</td>
</tr>

<tr>
<td>Yes</td>
<td>No</td>
<td>Any</td>
<td>Unsigned</td>
</tr>

<tr>
<td>Yes</td>
<td>No</td>
<td>Developer</td>
<td>Signed</td>
</tr>

<tr>
<td>Yes</td>
<td>No</td>
<td>Test account</td>
<td>Signed</td>
</tr>

<tr>
<td>Yes</td>
<td>Yes</td>
<td>Any</td>
<td>Signed</td>
</tr>

</table>

<p>To make an In-app Billing request with a reserved product ID, you simply construct a normal
<code>REQUEST_PURCHASE</code> request, but instead of using a real product ID from your
application's product list you use one of the reserved product IDs.</p>

<p>To test your application using the reserved product IDs, follow these steps:</p>

<ol>
  <li><strong>Install your application on an Android-powered device.</strong>
    <p>You cannot use the emulator to test In-app Billing; you must install your application on a
    device to test In-app Billing.</p>
    <p>To learn how to install an application on a device, see <a
    href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
    device</a>.</p>
  </li>
  <li><strong>Sign in to your device with your developer account.</strong>
    <p>You do not need to use a test account if you are testing only with the reserved product
    IDs.</p>
  </li>
  <li><strong>Verify that your device is running a supported version of the Google Play
  application or the MyApps application.</strong>
    <p>If your device is running Android 3.0, In-app Billing requires version 5.0.12 (or higher) of
    the MyApps application. If your device is running any other version of Android, In-app Billing
    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
    version of the Google Play application, see <a
    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
    Play</a>.</p>
  </li>
  <li><strong>Run your application and purchase the reserved product IDs.</strong></li>
</ol>

<p class="note"><strong>Note</strong>: Making In-app Billing requests with the reserved product IDs
overrides the usual Google Play production system. When you send an In-app Billing request for a
reserved product ID, the quality of service will not be comparable to the production
environment.</p>

<h2 id="billing-testing-real">Testing In-app Purchases Using Your Own Product IDs</h2>

<p>After you finish your static response testing, and you verify that signature verification is
working in your application, you can test your In-app Billing implementation by making actual in-app
purchases. Testing real in-app purchases enables you to test the end-to-end In-app Billing
experience, including the actual responses from Google Play and the actual checkout flow that
users will experience in your application.</p>

<p class="note"><strong>Note</strong>: You do not need to publish your application to do end-to-end
testing. You only need to upload your application as a draft application to perform end-to-end
testing.</p>

<p>To test your In-app Billing implementation with actual in-app purchases, you will need to
register at least one test account on the Google Play Developer Console. You cannot use your
developer account to test the complete in-app purchase process because Google Wallet does not let
you buy items from yourself. If you have not set up test accounts before, see <a
href="{@docRoot}google/play/billing/billing_admin.html#billing-testing-setup">Setting up test
accounts</a>.</p>

<p>Also, a test account can purchase an item in your product list only if the item is published. The
application does not need to be published, but the item does need to be published.</p>

<p>When you use a test account to purchase items, the test account is billed through Google Wallet
and your Google Wallet merchant account receives a payout for the purchase. Therefore, you may
want to refund purchases that are made with test accounts, otherwise the purchases will show up as
actual payouts to your merchant account.</p>

<p>To test your In-app Billing implementation with actual purchases, follow these steps:</p>

<ol>
  <li><strong>Upload your application as a draft application to the Developer Console.</strong>
    <p>You do not need to publish your application to perform end-to-end testing with real product
    IDs; you only need to upload your application as a draft application. However, you must sign
    your application with your release key before you upload it as a draft application. Also, the
    version number of the uploaded application must match the version number of the application you
    load to your device for testing. To learn how to upload an application to Google Play, see
    <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113469">Uploading
    applications</a>.</p>
  </li>
  <li><strong>Add items to the application's product list.</strong>
    <p>Make sure that you publish the items (the application can remain unpublished). See <a
    href="{@docRoot}google/play/billing/billing_admin.html#billing-catalog">Creating a product
    list</a> to learn how to do this.</p>
  </li>
  <li><strong>Install your application on an Android-powered device.</strong>
    <p>You cannot use the emulator to test In-app Billing; you must install your application on a
    device to test In-app Billing.</p>
    <p>To learn how to install an application on a device, see <a
    href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
    device</a>.</p>
  </li>
 <li><strong>Make one of your test accounts the primary account on your device.</strong>
    <p>To perform end-to-end testing of In-app Billing, the primary account on your device must be
    one of the <a
    href="{@docRoot}google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a>
    that you registered on the Google Play site. If the primary account on your device is not a
    test account, you must do a factory reset of the device and then sign in with one of your test
    accounts. To perform a factory reset, do the following:</p>
    <ol>
      <li>Open Settings on your device.</li>
      <li>Touch <strong>Privacy</strong>.</li>
      <li>Touch <strong>Factory data reset</strong>.</li>
      <li>Touch <strong>Reset phone</strong>.</li>
      <li>After the phone resets, be sure to sign in with one of your test accounts during the
      device setup process.</li>
    </ol>
  </li>
  <li><strong>Verify that your device is running a supported version of the Google Play
  application or the MyApps application.</strong>
    <p>If your device is running Android 3.0, In-app Billing requires version 5.0.12 (or higher) of
    the MyApps application. If your device is running any other version of Android, In-app Billing
    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
    version of the Google Play application, see <a
    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
    Play</a>.</p>
  </li>
  <li><strong>Make in-app purchases in your application.</strong></li>
</ol>

<p class="note"><strong>Note:</strong> The only way to change the primary account on a device is to
do a factory reset, making sure you log on with your primary account first.</p>

<p>When you are finished testing your In-app Billing implementation, you are ready to
publish your application on Google Play. You can follow the normal steps for <a
href="{@docRoot}tools/publishing/preparing.html">preparing</a>, <a
href="{@docRoot}tools/publishing/app-signing.html">signing</a>, and <a
href="{@docRoot}distribute/googleplay/publish/preparing.html">publishing on Google Play</a>.
</p>