| page.title=Administering 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-list-setup">Creating a Product List</a></li> |
| <li><a href="#pricing-template">Pricing Templates</a></li> |
| <li><a href="#billing-purchase-type">Choosing a Product Type</a></li> |
| <li><a href="#billing-refunds">Handling Refunds</a></li> |
| <li><a href="#billing-refunds">Working with Order Numbers</a></li> |
| <li><a href="#billing-testing-setup">Setting up Test Accounts</a></li> |
| <li><a href="#billing-support">Where to Get Support</a></li> |
| </ol> |
| |
| </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>In-app billing frees you from processing financial transactions, but you still need to perform a |
| few administrative tasks. These tasks include the following:</p> |
| <ul> |
| <li>Setting up and maintaining your product list on the Google Play Developer Console.</li> |
| <li>Registering test accounts.</li> |
| <li>Handling refunds when necessary.</li> |
| </ul> |
| </p> |
| |
| <p>To register a test account, you must have a Google Play publisher account. If you |
| already have a publisher account on Google Play, you can use your existing account. You do not |
| need to register for a new account to support in-app billing. If you don't have a publisher |
| account, you can register as a Google Play developer and set up a publisher account through the <a |
| href="http://play.google.com/apps/publish">Google Play Developer Console</a>.</p> |
| |
| <p>If you want to create a product list and issue refunds to your users, you must have a |
| Google payments merchant account. If you don't have a merchant account, you can |
| register for one through the Developer Console.</p> |
| |
| <h2 id="billing-list-setup">Creating a Product List</h2> |
| |
| <p>The Google Play Developer Console provides a product list for each of your published |
| apps. You can sell an item using Google Play's in-app billing feature only if the item is |
| listed on an app's product list. Each app has its own product list; you cannot sell |
| items that appear on another app's product list.</p> |
| |
| <p>You can access an app's product list by opening the <strong>In-app Products</strong> |
| page for an app that is listed in your developer account. The link to the |
| <strong>In-app Products</strong> page appears only if you have a Google payments merchant |
| account and the app's manifest includes the |
| <code>com.android.vending.BILLING</code> permission. For more information about this |
| permission, see <a href="{@docRoot}google/play/billing/billing_integrate.html#billing-permission"> |
| Updating Your App's Manifest</a>.</p> |
| |
| <p>A product list specifies items you are selling in an app: in-app products, |
| subscriptions, or a combination of both. For each item, the product list contains information |
| such as product ID, product description, and price. You can create a product list for any |
| published app, including apps published to the alpha and beta channels.</p> |
| |
| <p>The product list stores only metadata about the items you are selling in your app. |
| It does not store any digital content. You are responsible for storing and delivering |
| the digital content that you sell in your apps.</p> |
| |
| <p class="note"><strong>Note:</strong> Previously, you could test an app by |
| uploading an unpublished draft version. This functionality is no longer |
| supported; instead, you must publish it to the alpha or beta distribution |
| channel. For more information, see <a |
| href="{@docRoot}google/play/billing/billing_testing.html#draft_apps">Draft Apps |
| are No Longer Supported</a>. |
| |
| <p>In addition, an app package can have only one product list. If you create a product |
| list for an app, and you use the <a |
| href="{@docRoot}google/play/publishing/multiple-apks.html">multiple APK feature</a> to distribute |
| more than one APK for that app, the product list applies to all APK versions that are |
| associated with the app listing. You cannot create individual product lists for each APK if |
| you are using the multiple APK feature.</p> |
| |
| <p>You can add items to a product list two ways: you can add items one at a time on the <strong>In-app |
| Products</strong> page, or you can add a batch of items by importing the items from a |
| comma-separated values (CSV) file. Adding items one at a time is useful if your |
| app has only a few in-app items or you are adding only a few items to a |
| product list for testing purposes. The CSV file method is useful if your app has a large |
| number of in-app items.</p> |
| |
| <p class="note"><strong>Note:</strong> Batch upload of product lists containing |
| subscriptions is not supported. Also, when updating existing items in a batch upload, |
| you cannot include changes to in-app products that are linked to a |
| <a href="#pricing-template">pricing template</a>.</p> |
| |
| <h3 id="billing-form-add">Adding items one at a time to a product list</h3> |
| |
| <p>To add an item to a product list using the Developer Console UI, follow these steps:</p> |
| |
| <ol> |
| <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li> |
| <li>In the <strong>All applications</strong> panel, click on the |
| app name, then open the <strong>In-app Products</strong> page.</li> |
| <li><p>Click <strong>Add new product</strong>. After you provide the product type and ID for the item you are |
| selling, click <strong>Continue</strong>.</p> |
| <dl> |
| <dt>Product Type</dt> |
| <dd> |
| <p>The product type can be <strong>Managed product</strong> or <strong>Subscription</strong>. You cannot |
| change an item's product type after you create the item. For more information, see |
| <a href="#billing-purchase-type">Choosing a Product Type</a>.</p> |
| <p class="note"><strong>Note: </strong>For subscription items, you cannot change the |
| item's price once you have published the item.</p> |
| </dd> |
| <dt>Product ID</dt> |
| <dd> |
| <p>Product IDs are unique across an app's namespace. A product ID must start with a |
| lowercase letter or a number and must be composed of only lowercase letters (a-z), numbers |
| (0-9), underscores (_), and periods (.). The product ID <code>android.test</code> is reserved, as are all |
| product IDs that start with <code>android.test</code>.</p> |
| <p class="note"><strong>Note: </strong>Be sure to plan your product ID namespace carefully. You |
| cannot modify an item's product ID after the item is created, and you cannot reuse |
| a product ID within an app.</p> |
| </dd> |
| </dl> |
| </li> |
| <li><p>Enter additional information about the item, then click <strong>Save</strong>.</p> |
| <dl> |
| <dt>Publishing State</dt> |
| <dd> |
| <p>An item's publishing state can be <strong>Active</strong> or |
| <strong>Inactive</strong>. To be visible to a user during checkout, an item's publishing state must be set to |
| <strong>Active</strong>, and the item's app must be published on Google Play.</p> |
| <p class="note"><strong>Note:</strong> If you're using a test account, users can see active items |
| within unpublished apps, as well. For more information, see <a |
| href="{@docRoot}google/play/billing/billing_testing.html#billing-testing-real">Testing In-app |
| Billing</a>.</p> |
| </dd> |
| <dt>Languages and Translations</dt> |
| <dd> |
| <p>By default, in-app products inherit their default language from the parent app.</p> |
| <p>You can provide localized titles and descriptions for your in-app |
| products by selecting <strong>Add Translations</strong>. If you want Google |
| Play to translate your title and description for you, based on the title and |
| description in the default language, just choose the languages that you |
| want to offer. You can also provide custom translations in specific |
| languages.</p> |
| </dd> |
| <dt>Title</dt> |
| <dd> |
| The title is a short descriptor for the item. An example of a title is: "Sleeping potion." |
| Every item must have a title. The title is visible to users during checkout. For optimum appearance, |
| titles should be no longer than 25 characters; however, titles can be up to 55 characters in length. |
| </dd> |
| <dt>Description</dt> |
| <dd> |
| The description is a long descriptor for the item. An example of a description is: |
| "Instantly puts creatures to sleep. Does not work on angry elves." Every item must have a description. |
| Descriptions can be up to 80 characters in length. |
| </dd> |
| <dt>Price</dt> |
| <dd> |
| <p>Provide a price in your home currency, or link the price to an existing |
| pricing template. Based on the price you enter or the prices |
| from the pricing template, the system autofills country-specific prices for |
| different currencies. These generated prices use current exchange rates and |
| locally relevant pricing patterns (see figure 1).</p> |
| <p>You can also change prices for other currencies manually, but you can do |
| this only if a currency is used in one of the target countries for your |
| app. You can specify target countries for your app on the |
| <strong>Pricing & Distribution</strong> page in the Google Play |
| Developer Console.</p> |
| </dd> |
| </dl> |
| </li> |
| </ol> |
| |
| <figure id="fig-elp"> |
| <img class="border-img" src="{@docRoot}images/in-app-billing/edit_local_prices.png" |
| width="700" alt="An item that costs 1.99 in USD usually costs a different |
| amount in AUD, EUR, or BOB. Some countries also add tax to the price."> |
| <figcaption> |
| <b>Figure 1. </b>Specifying additional currencies for an in-app product. |
| </figcaption> |
| </figure> |
| |
| <h3 id="billing-bulk-add">Adding a batch of items to a product list</h3> |
| |
| <p>To add a batch of items to a product list using a CSV file, you first need to create your CSV |
| file. The data values that you specify in the CSV file represent the same data values you specify |
| manually through the In-app Products UI (see <a href="#billing-form-add">Adding items one at a time |
| to a product list</a>). |
| |
| <p>If you are importing and exporting CSV files with in-app products, keep |
| country-specific pricing in mind. If you use auto-fill, you can provide a |
| tax-exclusive default price, and tax-inclusive prices will be auto-filled. If you |
| do not use auto-fill, prices you provide must include tax.</p> |
| |
| <p class="note"><strong>Note:</strong> Batch upload of product lists containing |
| subscriptions is not supported. Also, when updating existing items in a batch |
| upload, you cannot include changes to in-app products that are linked to a |
| <a href="#pricing-template">pricing template</a>.</p> |
| |
| <p>To import the items that are specified in your CSV file, do the following:</p> |
| |
| <ol> |
| <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li> |
| <li>In the <strong>All applications</strong> panel, select the app |
| name, then open the <strong>In-app Products</strong> page.</li> |
| <li>On the In-app Products List page, click <strong>Import/Export</strong> |
| > <strong>Import in-app products from CSV file</strong>, then select your |
| CSV file. |
| <p>The CSV file must be on your local computer or on a local disk that is connected to your |
| computer.</p> |
| </li> |
| <li>Select the <strong>Overwrite</strong> checkbox if you want to overwrite existing items in |
| your product list. |
| <p>This option overwrites values of existing items only if the value of the <em>product_id</em> |
| in the CSV file matches the In-app Product ID for an existing item in the product list. |
| Overwriting doesn't delete items that are on a product list but not present in the CSV |
| file.</p> |
| </li> |
| </ol> |
| |
| <p>You can also export an existing product list to a CSV file by clicking <strong>Export to CSV |
| </strong> on the In-app Product List page. This is useful if you have manually added items to |
| a product list and you want to start managing the product list through a CSV file.</p> |
| |
| <h4 id="billing-bulk-format">Formatting batches of items</h4> |
| |
| <p>The CSV file uses commas (,) and semicolons (;) to separate data values. |
| Commas are used to separate primary data values, and semicolons are used to |
| separate subvalues. For example, the syntax for the CSV file is as follows:</p> |
| |
| <p>"<em>product_id</em>","<em>publish_state</em>","<em>purchase_type</em>","<em>autotranslate</em> |
| ","<em>locale</em>; <em>title</em>; <em>description</em>","<em>autofill</em>","<em>country</em>; |
| <em>price</em>" |
| </p> |
| |
| <p>Descriptions and usage details are provided below.</p> |
| |
| <dl> |
| <dt>product_id</dt> |
| <dd> |
| This is equivalent to the In-app Product ID setting in the In-app Products UI. If you specify |
| a <em>product_id</em> that already exists in a product list, and you choose to overwrite |
| the product list while importing the CSV file, the data for the existing item is overwritten with |
| the values specified in the CSV file. The overwrite feature does not delete items that are on a |
| product list but not present in the CSV file. |
| </dd> |
| <dt>publish_state</dt> |
| <dd> |
| This is equivalent to the Publishing State setting in the In-app Products UI. Can be <code> |
| published</code> or <code>unpublished</code>. |
| </dd> |
| <dt>purchase_type</dt> |
| <dd> |
| This is equivalent to the Product Type setting in the In-app Products UI. Can be <code> |
| managed_by_android</code>, which is equivalent to <strong>Managed per user account |
| </strong> in the In-app Products UI, or <code>managed_by_publisher</code>, which is equivalent |
| to <strong>Unmanaged</strong> in the In-app Products UI. |
| </dd> |
| <dt>autotranslate</dt> |
| <dd> |
| This is equivalent to selecting the <strong>Fill fields with auto translation</strong> |
| checkbox in the In-app Products UI. Can be <code>true</code> or <code>false</code>. |
| </dd> |
| <dt>locale</dt> |
| <dd> |
| <p>This is equivalent to the Language setting in the In-app Products UI. You must have an entry |
| for the default locale. The default locale must be the first entry in the list of |
| locales, and it must include a <em>title</em> and <em>description</em>. If you want to provide |
| translated versions of the <em>title</em> and <em>description</em> in addition to the default, |
| you must use the following syntax rules:</p> |
| <ul> |
| <li> |
| <p>If <em>autotranslate</em> is <code>true</code>, you must specify the default locale, |
| default title, default description, and other locales using the following format:</p> |
| <p>"true,"<em>default_locale</em>; <em>default_locale_title</em>; |
| <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_3</em>, ..."</p> |
| </li> |
| <li> |
| <p>If <em>autotranslate</em> is <code>false</code>, you must specify the default locale, |
| default title, and default description as well as the translated titles and descriptions using |
| the following format:</p> |
| <p>"false,"<em>default_locale</em>; <em>default_locale_title</em>; |
| <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_2_title</em>; |
| <em>local_2_description</em>; <em>locale_3</em>; <em>locale_3_title</em>; |
| <em>locale_3_description</em>; ..."</p> |
| </li> |
| </ul> |
| <p>See table 1 for a list of the language codes you can use with the <em>locale</em> field.</p> |
| </dd> |
| <dt>title</dt> |
| <dd> |
| This is equivalent to the Title setting in the In-app Products UI. If the <em>title</em> |
| contains a semicolon, it must be escaped with a backslash (for example, <code>\;</code>). Also, a backslash |
| must be escaped with a backslash (for example, <code>\\</code>). |
| </dd> |
| <dt>description</dt> |
| <dd> |
| This is equivalent to the Description in the In-app Products UI. If the <em>description</em> |
| contains a semicolon, it must be escaped with a backslash (for example, <code>\;</code>). Also, a backslash |
| must be escaped with a backslash (for example, <code>\\</code>). |
| </dd> |
| <dt>autofill</dt> |
| <dd> |
| <p>This is equivalent to clicking <strong>Auto Fill</strong> in the In-app Products UI. Can be |
| <code>true</code> or <code>false</code>. The syntax for specifying the <em>country</em> |
| and <em>price</em> varies depending on which <em>autofill</em> setting you use:</p> |
| <ul> |
| <li> |
| <p>If <em>autofill</em> is set to <code>true</code>, you need to specify only the default |
| price in your home currency, and you must use this syntax:</p> |
| <p>"true","<em>default_price_in_home_currency</em>" |
| </li> |
| <li> |
| <p>If <em>autofill</em> is set to <code>false</code>, you need to specify a <em>country</em> |
| and a <em>price</em> for each currency, and you must use the following syntax:</p> |
| <p>"false", "<em>home_country</em>; <em>default_price_in_home_currency</em>; <em>country_2</em>; |
| <em>country_2_price</em>; <em>country_3</em>; <em>country_3_price</em>; ..."</p> |
| </li> |
| </ul> |
| <p class="note"><strong>Note: </strong>If you use an <em>autofill</em> value of <code>false</code> |
| and set country prices manually, you must incorporate country-specific |
| pricing patterns, including tax rates, into the prices you provide.</p> |
| </dd> |
| <dt>country</dt> |
| <dd> |
| The country for which you are specifying a price. You can only list countries that your |
| app is targeting. The country codes are two-letter uppercase |
| ISO country codes (such as "US"), as defined by |
| <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-2</a>. |
| </dd> |
| <dt>price</dt> |
| <dd> |
| This is equivalent to the Price in the In-app Products UI. The price must be specified in |
| micro-units. To convert a currency value to micro-units, you multiply the real value by |
| 1,000,000. |
| For example, if you want to sell an in-app item for $1.99, you specify <code>1990000</code> in the |
| <em>price</em> field. |
| </dd> |
| </dl> |
| |
| <p class="table-caption" id="language-table"><strong>Table 1.</strong> Language codes you can use |
| with the <em>locale</em> field.</p> |
| |
| <table> |
| |
| <tr> |
| <th>Language</th> |
| <th>Code</th> |
| <th>Language</th> |
| <th>Code</th> |
| </tr> |
| <tr> |
| <td>Chinese</td> |
| <td>zh_TW</td> |
| <td>Italian</td> |
| <td>it_IT</td> |
| </tr> |
| <tr> |
| <td>Czech</td> |
| <td>cs_CZ</td> |
| <td>Japanese</td> |
| <td>ja_JP</td> |
| </tr> |
| <tr> |
| <td>Danish</td> |
| <td>da_DK</td> |
| <td>Korean</td> |
| <td>ko_KR</td> |
| </tr> |
| <tr> |
| <td>Dutch</td> |
| <td>nl_NL</td> |
| <td>Norwegian</td> |
| <td>no_NO</td> |
| </tr> |
| <tr> |
| <td>English</td> |
| <td>en_US</td> |
| <td>Polish</td> |
| <td>pl_PL</td> |
| </tr> |
| <tr> |
| <td>French</td> |
| <td>fr_FR</td> |
| <td>Portuguese</td> |
| <td>pt_PT</td> |
| </tr> |
| <tr> |
| <td>Finnish</td> |
| <td>fi_FI</td> |
| <td>Russian</td> |
| <td>ru_RU</td> |
| </tr> |
| <tr> |
| <td>German</td> |
| <td>de_DE</td> |
| <td>Spanish</td> |
| <td>es_ES</td> |
| </tr> |
| <tr> |
| <td>Hebrew</td> |
| <td>iw_IL</td> |
| <td>Swedish</td> |
| <td>sv_SE</td> |
| </tr> |
| <tr> |
| <td>Hindi</td> |
| <td>hi_IN</td> |
| <td>--</td> |
| <td>--</td> |
| </tr> |
| </table> |
| |
| <h2 id="pricing-template"> |
| Pricing Templates |
| </h2> |
| |
| <p> |
| If you sell multiple apps at the same price, or if you sell multiple in-app |
| products at the same price across one or more apps, you can add <em>pricing |
| templates</em>. These templates make it easier to manage shared prices. |
| </p> |
| |
| <h3 id="add-pricing-template"> |
| Adding a pricing template |
| </h3> |
| |
| <p> |
| When creating a pricing template, you provide new pricing information that you |
| can apply to paid apps and in-app products. To add a pricing template, do the |
| following: |
| </p> |
| |
| <ol> |
| <li> |
| <a href="http://play.google.com/apps/publish">Log in</a> to your publisher |
| account. |
| </li> |
| |
| <li>In the <strong>Settings</strong> panel, open the <strong>Pricing |
| template</strong> page. |
| </li> |
| |
| <li> |
| <p> |
| If you are adding your first pricing template, the <strong>Add a Pricing |
| Template</strong> banner appears. Select <strong>Add template</strong> to |
| create a new template. The new template's <em>Pricing</em> tab appears. |
| </p> |
| |
| <p> |
| Otherwise, you see a list of your pricing templates. Select <strong>New |
| pricing template</strong>. The new template's <em>Pricing</em> tab |
| appears. |
| </p> |
| </li> |
| |
| <li> |
| <p> |
| Provide details about the template. These details include the name, the |
| price, and whether to include tax as part of your country-specific |
| prices. |
| </p> |
| <p> |
| Based on the price and tax option you provide, the Developer Console |
| generates prices for international currencies using current exchange |
| rates and country-specific pricing patterns. |
| </p> |
| </li> |
| <li>Select <strong>Create template</strong> to finish adding the template. |
| </li> |
| </ol> |
| |
| <h3 id="link-pricing-template"> |
| Linking a pricing template |
| </h3> |
| |
| <p> |
| You can create links between pricing templates and sets of paid apps and |
| in-app products that share the same price. After completing this linking |
| process, any changes you make to the pricing template are applied to the |
| prices of items that you've linked to the template. To complete the linking |
| process, use either the pricing template's <em>Linked Items</em> tab or the |
| Price section within a paid app or in-app product's pricing page. |
| </p> |
| |
| <p class="note"> |
| <strong>Note:</strong> Since a subscription within your app has a constant |
| price, you cannot link a subscription with a pricing template. You can, |
| however, import the prices from a pricing template and apply them to a new |
| subscription. |
| </p> |
| |
| <h4> |
| Linking a pricing template to in-app products and paid apps |
| </h4> |
| |
| <p> |
| To link a pricing template to an in-app product, do the following: |
| </p> |
| |
| <ol> |
| <li> |
| <a href="http://play.google.com/apps/publish">Log in</a> to your publisher |
| account. |
| </li> |
| |
| <li>In the <strong>Settings</strong> panel, open the <strong>Pricing |
| template</strong> page. This page shows the list of pricing templates you have |
| created for your account. |
| </li> |
| |
| <li>Choose an existing pricing template that you want to link to an in-app |
| product, then select the template's <em>Linked Items</em> tab. This tab shows |
| options to link your pricing template to in-app products and paid apps |
| (see figure 2). |
| </li> |
| |
| <li>In the Link In-App Products section of the tab, enter or choose the name |
| of an app. This app should contain the in-app product that you want to link |
| to your pricing template. |
| </li> |
| |
| <li>Based on the app that you selected, you see a list of in-app products |
| that are active and are not yet linked to a pricing template. Choose the |
| in-app product that you want to link to the pricing template by selecting the |
| <strong>Link</strong> button that appears in the same row as the in-app |
| product. |
| </li> |
| |
| <li>The price of the in-app product is now linked to your pricing template. |
| Any changes you make to the prices within your pricing template affect the |
| prices of the linked in-app product. |
| </li> |
| </ol> |
| |
| <p> |
| To link a pricing template to the price of a paid app, you follow a similar |
| process. On the pricing template's <em>Linked Items</em> tab, choose a paid |
| app in the Link Paid Apps section. |
| </p> |
| |
| <figure id="fig-lpt"> |
| <img class="border-img" |
| src="{@docRoot}images/in-app-billing/link_pricing_template.png" width="700" |
| alt="The Sleeping Potion in-app product is linked to the Basic Inventory item, |
| but the Invisibility Potion is not."> |
| <figcaption> |
| <b>Figure 2. </b>On a pricing template's <em>Linked Items</em> tab, you can |
| change which in-app products and paid apps are linked to the pricing |
| template. |
| </figcaption> |
| </figure> |
| |
| <h4> |
| Linking an in-app product or paid app to a pricing template |
| </h4> |
| |
| <p> |
| To link an in-app product to a pricing template, do the following: |
| </p> |
| |
| <ol> |
| <li> |
| <a href="http://play.google.com/apps/publish">Log in</a> to your publisher |
| account. |
| </li> |
| |
| <li>In the <strong>All applications</strong> panel, select the app name, then |
| open the <strong>In-app Products</strong> page. |
| </li> |
| |
| <li>Choose the in-app product that you want to link to a pricing template. |
| The item's details page appears. |
| </li> |
| |
| <li>In the Pricing section, choose the pricing template that you want to link |
| to the price of this in-app product. |
| </li> |
| |
| <li>The price of the in-app product is now linked to the pricing template you |
| selected. Any changes you make to the prices within your pricing template |
| affect the prices of this in-app product. |
| </li> |
| </ol> |
| |
| <p> |
| To link the price of a paid app to a pricing template, you follow a similar |
| process on the app's <strong>Pricing & Distribution</strong> page. |
| </p> |
| |
| <h3 id="delete-linked-item"> |
| Deleting an item that is linked to a pricing template |
| </h3> |
| |
| <p> |
| As your app evolves, you may find it useful to remove older versions of |
| in-app products or unpublish paid apps, some of which may be linked to pricing |
| templates. To delete an in-app product or unpublish a paid app that is linked |
| to a pricing template, complete the following steps. You don't need to unlink |
| the in-app product or paid app from the pricing template beforehand. |
| </p> |
| |
| <h4> |
| Deleting an in-app product that is linked to a template |
| </h4> |
| |
| <p> |
| To delete an in-app product that is linked to a template, do the following: |
| </p> |
| |
| <ol> |
| <li> |
| <a href="http://play.google.com/apps/publish">Log in</a> to your publisher |
| account. |
| </li> |
| |
| <li>Select the app that contains the in-app product you want to delete. |
| </li> |
| |
| <li>Open the app's <strong>In-app Products</strong> page. |
| </li> |
| |
| <li>Choose the in-app product that you want to delete. |
| </li> |
| |
| <li>Select the button that indicates whether the in-app product is active or |
| inactive (enclosed in a box within figure 3). The drop-down menu includes a |
| <strong>Delete</strong> option. |
| </li> |
| <li>Select <strong>Delete</strong>, then choose <strong>Yes</strong> in the |
| confirmation dialog that appears. |
| </li> |
| </ol> |
| |
| <figure id="fig-diap"> |
| <img class="border-img" src="{@docRoot}images/in-app-billing/delete_iap.png" |
| width="500" alt=""> |
| <figcaption> |
| <b>Figure 3. </b>Deleting an in-app product that is linked to a pricing |
| template. |
| </figcaption> |
| </figure> |
| |
| <h4> |
| Unpublishing a paid app that is linked to a template |
| </h4> |
| |
| <div class="figure-right"> |
| <figure id="fig-upa"> |
| <img src="{@docRoot}images/in-app-billing/unpublish_paid_app.png" |
| width="700" alt=""> |
| <figcaption> |
| <b>Figure 4. </b>Unpublishing an app that has already been published and is |
| linked to a pricing template. |
| </figcaption> |
| </figure> |
| </div> |
| |
| <p> |
| To unpublish a paid app that is already published and is linked to a template, |
| do the following: |
| </p> |
| |
| <ol> |
| <li> |
| <a href="http://play.google.com/apps/publish">Log in</a> to your publisher |
| account. |
| </li> |
| |
| <li>Select the app that you want to unpublish. |
| </li> |
| |
| <li>Select <strong>Unpublish app</strong> (enclosed in a box within figure 4), |
| then choose <strong>Unpublish</strong> in the confirmation dialog that |
| appears. |
| </li> |
| </ol> |
| |
| <h3 id="delete-pricing-template"> |
| Deleting a pricing template |
| </h3> |
| |
| <p> |
| If you no longer need a pricing template, you can delete it by completing the |
| following steps: |
| </p> |
| |
| <ol> |
| <li> |
| <a href="http://play.google.com/apps/publish">Log in</a> to your publisher |
| account. |
| </li> |
| |
| <li>In the <strong>Settings</strong> panel, open the <strong>Pricing |
| template</strong> page, which shows the list of pricing templates you have |
| created for your account. |
| </li> |
| |
| <li>Select the pricing template that you wish to delete. |
| </li> |
| |
| <li>On the pricing template's <em>Linked Items</em> tab, unlink all in-app |
| products that are linked to the template.</li> |
| |
| <li>Select <strong>Delete template</strong>. |
| </li> |
| </ol> |
| |
| <h2 id="billing-purchase-type">Choosing a Product Type</h3> |
| |
| <p>An item's product type controls how Google Play manages the purchase of the item. The supported |
| product types include "managed product" and "subscription." Since support for different product |
| types can vary among versions of the In-app Billing API, make sure that you choose a product |
| type that's valid for the version of the In-app Billing API that your app uses. </p> |
| |
| <p>For details, refer to the documentation for the <a |
| href="{@docRoot}google/play/billing/api.html#producttype">In-app Billing API</a>. |
| |
| <h2 id="billing-refunds">Handling Refunds</h2> |
| |
| <p>In-app billing does not allow users to send a refund request to Google Play. Refunds for |
| in-app purchases must be directed to you (the app developer). You can then process the |
| refund through your Google payments merchant account. When you do this, Google Play receives a |
| refund notification from Google payments, and Google Play sends a refund message to your |
| app. For more information, 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> |
| |
| <p class="caution"><strong>Important:</strong> You cannot use the API to issue |
| refunds or cancel In-app Billing transactions. You must do this manually through your Google |
| payments merchant account. However, you can use the API to retrieve order |
| information.</p> |
| |
| <h2 id="orderId">Working with Order Numbers</h2> |
| |
| <p>When a user purchases an in-app item, Google assigns the transaction |
| a unique and permanent order number. Google Play provides that order number to |
| you at the conclusion of the purchase flow, as the value of the |
| <code>orderId</code> field of the <code>PURCHASE_STATE_CHANGED</code> |
| intent.</p> |
| |
| <p class="note"> |
| <strong>Note:</strong> Test purchases don't have an <code>orderId</code> |
| field. To track test transactions, you use the <code>purchaseToken</code> |
| field instead. For more information about working with test purchases, see <a |
| href="{@docRoot}google/play/billing/billing_testing.html">Testing In-app |
| Billing</a>. |
| </p> |
| |
| <p>In your app, you can use the order number as a general-purpose identifier for |
| the in-app purchase transaction. After the purchase, you can use the order |
| number as a means of tracking the transaction in reconciliation reports and for |
| customer support.</p> |
| |
| <p>The order number itself is a string consisting of numbers only, with a format |
| assigned and managed by Google.</p> |
| |
| <p>For transactions dated 5 December 2012 or later, Google payments assigns a |
| Merchant Order Number (rather than a Google Order Number) and reports the Merchant |
| Order Number as the value of <code>orderId</code>. Here's an |
| example:</p> |
| |
| <pre>"orderId" : "GPA.1234-5678-9012-34567"</pre> |
| |
| <p>For transactions dated previous to 5 December 2012, Google checkout assigned |
| a Google Order Number and reported that number as the value of |
| <code>orderId</code>. Here's an example of an <code>orderId</code> holding a |
| Google Order Number:</p> |
| |
| <pre>"orderId" : "556515565155651"</pre> |
| |
| <h2 id="billing-testing-setup">Setting Up Test Accounts</h2> |
| |
| <p>The Google Play Developer Console lets you set up one or more test accounts. |
| A test account is a regular Google account that you register on the Developer |
| Console as a test account. Test accounts are authorized to make in-app purchases |
| from apps that you have uploaded to the Google Play Developer Console |
| but have not yet published.</p> |
| |
| <p>You can use any Google account as a test account. Test accounts are useful if you want to let |
| multiple people test In-app Billing on apps without giving them access to your publisher |
| account's sign-in credentials. If you want to own and control the test accounts, you can create the |
| accounts yourself and distribute the credentials to your developers or testers.</p> |
| |
| <p>Test accounts have three limitations:</p> |
| |
| <ul> |
| <li>Test account users can make purchase requests only within apps that are already |
| uploaded to your publisher account (although the app doesn't need to be published).</li> |
| <li>Test accounts can only be used to purchase items that are listed (and published) in an |
| app's product list.</li> |
| <li>Test account users do not have access to your publisher account and cannot upload apps |
| to your publisher account.</li> |
| </ul> |
| |
| <p>To add test accounts to your publisher account, follow these steps:</p> |
| |
| <ol> |
| <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li> |
| <li>Click the <strong>Settings</strong> icon.</li> |
| <li>Locate the License Testing panel.</li> |
| <li>Add the email addresses for the test accounts you want to register, |
| separating each account with a comma.</li> |
| <li>Click <strong>Save</strong> to save your profile changes.</li> |
| </ol> |
| |
| <h3 id="license_key">Getting an app's license key</h3> |
| |
| <p>The Google Play Developer Console provides a public licensing key for each |
| app.</p> |
| |
| <p>To locate the key for an app, follow these steps:</p> |
| <ol> |
| <li>Open the <strong>All applications</strong> panel.</li> |
| <li>Click on the app name, then open the <strong>Services & APIs</strong> |
| page.</li> |
| <li>Scroll down to the section of the page labeled Your License Key for This |
| Application, as shown in figure 5.</li> |
| </ol> |
| <p>Previously, the Developer Console provided a single public key per developer |
| account. To transition apps to the new per-app public key, the Developer Console |
| sets the app-specific key as the former developer key. This ensures compatibility |
| for apps that depend on the (former) developer key. </p> |
| |
| <figure id="fig-bak"> |
| <img class="border-img" src="{@docRoot}images/in-app-billing/billing_app_key.png" |
| width="700" alt=""> |
| <figcaption> |
| <b>Figure 5. </b>You can find the license key for each app on the |
| <strong>Services & APIs</strong> page. |
| </figcaption> |
| </figure> |
| |
| <h2 id="billing-support">Where to Get Support</h2> |
| |
| <p>If you have questions or encounter problems while implementing In-app Billing, contact the |
| support resources listed in the following table (see table 2). By directing your queries to the |
| correct forum, you can get the support you need more quickly.</p> |
| |
| <p class="table-caption" id="support-table"><strong>Table 2.</strong> Developer support resources |
| for Google Play In-app Billing.</p> |
| |
| <table> |
| |
| <tr> |
| <th>Support Type</th> |
| <th>Resource</th> |
| <th>Range of Topics</th> |
| </tr> |
| <tr> |
| <td rowspan="2">Development and testing issues</td> |
| <td>Google Groups: <a |
| href="http://groups.google.com/group/android-developers">android-developers</a> </td> |
| <td rowspan="2">In-app billing integration questions, user experience ideas, handling of responses, |
| obfuscating code, IPC, test environment setup.</td> |
| </tr> |
| <tr> |
| <td>Stack Overflow: <a |
| href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/ |
| android</a></td> |
| </tr> |
| <tr> |
| <td>Billing issue tracker</td> |
| <td><a href="http://code.google.com/p/marketbilling/issues/">Billing |
| project issue tracker</a></td> |
| <td>Bug and issue reports related specifically to In-app Billing sample code.</td> |
| </tr> |
| </table> |
| |
| <p>For general information about how to post to the groups listed above, see <a |
| href="{@docRoot}resources/community-groups.html">Developer Forums</a> document in the Resources |
| tab.</p> |