From 197226e4a5a4dca305fbdad52965dfea290b9ed6 Mon Sep 17 00:00:00 2001
From: Kevin Hufnagle
You can access an app's product list by opening the In-app Products +
You can access an app's product list by opening the In-app Products
page for an app that is listed in your developer account. The link to the
-In-app Products page appears only if you have a Google payments merchant
+In-app Products page appears only if you have a Google payments merchant
account and the app's manifest includes the
com.android.vending.BILLING
permission. For more information about this
permission, see
@@ -73,7 +73,7 @@ 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 Draft Apps
-are No Longer Supported.
+are No Longer Supported.
In addition, an app package can have only one product list. If you create a product
list for an app, and you use the
- You can add items to a product list two ways: you can add items one at a time on the In-app
-Products page, or you can add a batch of items by importing the items from a
+ You can add items to a product list two ways: you can add items one at a time on the In-app
+Products 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
@@ -100,14 +100,14 @@ number of in-app items. Click Add new product. After you provide the product type and ID for the item you are
selling, click Continue. The product type can be Managed product or Subscription. You cannot
+ The product type can be "Managed product" or "Subscription." You cannot
change an item's product type after you create the item. For more information, see
Choosing a Product Type. Note: For subscription items, you cannot change the
@@ -169,7 +169,7 @@ number of in-app items. 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
- Pricing & Distribution page in the Google Play
+ Pricing & Distribution page in the Google Play
Developer Console.
@@ -187,266 +187,412 @@ number of in-app items.
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 Adding items one at a time -to a product list). +
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 options that you set when adding in-app products to a product list using the +Google Play Developer Console UI. For more information about using this UI, see +Adding items one at a time to a product list. -
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.
+Note: Batch upload of in-app 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 pricing template.
-Note: 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 -pricing template.
- -To import the items that are specified in your CSV file, do the following:
+To import the in-app products that are specified in your CSV file, do the +following:
The CSV file must be on your local computer or on a local disk that is connected to your - computer.
-This option overwrites values of existing items only if the value of the product_id - 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.
+On the In-app Products page, click + Import/Export > Import in-app products from CSV + file to open the Import In-app Products dialog.
++ If you want to overwrite existing in-app products in your product list + during the import process, select the Overwrite existing + products checkbox. +
+
+ This option overwrites values of existing items only if the value of the
+ Product ID
in the CSV file matches the in-app product ID for
+ an existing in-app product in the product list. The overwriting process
+ doesn't delete in-app products that exist in a product list but aren't
+ included in the CSV file
+
Note: If you choose not to overwrite
+ existing items, the Product ID
given to each item in the CSV
+ file must be different from any of the Product ID
values
+ assigned to existing in-app products.
+
You can also export an existing product list to a CSV file by clicking Export to CSV - 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.
++ You can also export an existing product list to a CSV file by clicking + Import/Export > Export in-app products to CSV file + on the In-app Products page. This is useful if you have + used the UI to add in-app products to your app but you want to start managing + the product list through a CSV file instead. +
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:
+
+ 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. Each item must appear entirely on a
+ single line within the CSV file.
+
+ When creating a CSV file that represents a list of items, you must specify the + CSV syntax on the first row, followed by the items themselves on subsequent + rows, as shown in the following example: +
+ ++Product ID,Published State,Purchase Type,Auto Translate,Locale; Title; Description,Auto Fill Prices,Price,Pricing Template ID +basic_sleeping_potion,published,managed_by_android,false,en_US; Basic Sleeping Potion; Puts small creatures to sleep.; es_ES; Poción básica de dormir; Causa las criaturas pequeñas ir a dormir.,false,,4637138456024710495 +standard_sleeping_potion,published,managed_by_android,false,en_US; Standard Sleeping Potion; Puts all creatures to sleep for 2 minutes.,true, 1990000, +invisibility_potion,published,managed_by_android,false,en_US; Invisibility Potion; Invisible to all enemies for 5 minutes.,false, US; 1990000; BR; 6990000; RU; 129000000; IN; 130000000; ID; 27000000000; MX; 37000000; +-
"product_id","publish_state","purchase_type","autotranslate -","locale; title; description","autofill","country; -price", "pricing_template_id" +
+ This example contains details for three items, each of which represents an + in-app product:
+en_US
+ and es_ES
locales. A pricing template defines the item's
+ price.
+ Descriptions and usage details are provided below.
++ Each row in a CSV file can contain the following values, though at least one + of these values is undefined in each row: +
Product ID
+ Setting this value in the CSV file has the same effect as entering a + Product ID when creating a new in-app product. +
+
+ If you specify a Product ID
assigned to an in-app product that already
+ exists in a product list, and you've checked the Overwrite
+ existing products checkbox in the Import In-app Products
+ dialog, the data for the existing in-app product is overwritten with the
+ values that you specify in the CSV file.
+
Publish State
- published
or unpublished
.
+
+ This value must be set to published
+ or unpublished
.
+
+ Setting this value to published
has the same effect as
+ navigating to an item's Managed Product Details page and choosing
+ Active in the drop-down list next to the in-app product's
+ title and product ID. Setting the value to unpublished
+ has the same effect as choosing Inactive in the same
+ drop-down list.
+
Purchase Type
- managed_by_android
, which is equivalent to Managed per user account
- in the In-app Products UI, or managed_by_publisher
, which is equivalent
- to Unmanaged in the In-app Products UI.
+
+ This value must be set to managed_by_android
because batch
+ upload of product lists containing subscriptions is not supported.
+
+ Setting this value to managed_by_android
has the same effect
+ as selecting Managed product in the Add New
+ Product dialog when creating an in-app product.
+
Auto Translate
true
or false
.
+
+ This value must be set to false
because auto-translation of
+ in-app product details isn't supported.
+
+ If you want to provide translations of an in-app product's title and
+ description, you need to specify these translations explicitly within the
+ Locale
value.
+
Locale
, Title
, and Description
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 title and description. If you want to provide - translated versions of the title and description in addition to the default, - you must use the following syntax rules:
-+ If you include only one locale for an item, you must specify your app's + default locale and the item's default title and description: +
+ ++app_default_locale; item_default_title; item_default_description; ++ +
+ Setting these values has the same effect as performing the following + sequence of actions: +
+If autotranslate is true
, you must specify the default locale,
- default title, default description, and other locales using the following format:
"true,"default_locale; default_locale_title; - default_locale_description; locale_2; locale_3, ..."
+ Choosing a default language when you add a new app to your + publisher account.If autotranslate is false
, you must specify the default locale,
- default title, and default description as well as the translated titles and descriptions using
- the following format:
"false,"default_locale; default_locale_title; - default_locale_description; locale_2; locale_2_title; - local_2_description; locale_3; locale_3_title; - locale_3_description; ..."
+ Navigating to an in-app product's Managed Product Details page.See table 1 for a list of the language codes you can use with the locale field.
-\;
). Also, a backslash
- must be escaped with a backslash (for example, \\
).
- \;
). Also, a backslash
- must be escaped with a backslash (for example, \\
).
+
+ When setting the Locale
value, you can use any of the
+ language codes that appear within the Add Your Own Translations
+ dialog. You can access this dialog by navigating to an in-app product's
+ Managed Product Details page and clicking Add
+ translations or Manage translations.
+
+ Note: When specifying the Title
and
+ Description
values, use backslashes to escape the semicolon
+ (\;
) and backslash (\\
) characters.
+
+ If you want to include translated versions of the item's title and
+ description, you must list the default locale, title, and description,
+ followed by the locales, titles, and descriptions for each translation.
+ In the following example, the in-app product uses en_US
+ (United States English) as the default locale and es_ES
+ (Spain Spanish) as a translation:
+
+en_US; Invisibility Cloak; Makes you invisible.; es_ES; Capote Invisible; Se vuelven invisible. ++
+ Note: An app contains a single default language, but each
+ in-app product maintains its own list of translations. Therefore, although
+ the first locale in each item's Locale
value must be the same
+ throughout the CSV file, the other locales can differ from one item to
+ another.
+
+ Providing values for multiple translations has the same effect as + performing the following sequence of actions: +
+Auto Fill Prices
, Country
, and
+ Price
This is equivalent to clicking Auto Fill in the In-app Products UI. Can be
- true
or false
. The syntax for specifying the country
- and price varies depending on which autofill setting you use:
+ You can set Auto Fill Prices
to true
or
+ false
.
+ If an in-app product uses a pricing
+ template, you should set Auto Fill Prices
to
+ false
, and you shouldn't set a value for the
+ Price
.
+
+ Note: When you specify an item's price in a CSV file, you + provide a price in micro-units, where 1,000,000 micro-units is + equivalent to 1 unit of real currency. +
+
+ The following sections describe how the value of
+ Auto Fill Prices
affects the syntax and meaning of the
+ Country
and Price
values.
+
+ If you set Auto Fill Prices
to true
, you specify
+ only the item's default price; you don't include a Country
+ value. Setting Auto Fill Prices
to true
has the
+ same effect as performing the following sequence of actions:
+
If autofill is set to true
, you need to specify only the default
- price in your home currency, and you must use this syntax:
"true","default_price_in_home_currency" + Selecting Refresh exchange rates.
If autofill is set to false
, you need to either specify the pricing_template_id
- that is linked to the in-app product or specify a country and a price for each currency.
- If you choose to specify countries and prices, you must use the following syntax:
"false", "home_country; default_price_in_home_currency; country_2; - country_2_price; country_3; country_3_price; ..."
+ Selecting Apply.+ For example, under the following conditions: +
+en_US
.Note: If you use an autofill value of false
- and set country prices manually, you must incorporate country-specific
- pricing patterns, including tax rates, into the prices you provide.
- If you use this value, you shouldn't specify a value for the pricing_template_id.
+ ...you'd set the values of Auto Fill Prices
and
+ Price
at the end of a row in the CSV file as follows:
+
+true,1990000, ++ +
+ If you set Auto Fill Prices
to false
instead,
+ you specify a series of Country
and Price
+ values for all countries where you distribute your app, including the country corresponding to your app's default locale.
+ Each Country
value is the two-letter uppercase ISO country
+ code that represents a country where your app is distributed.
+
+ Note: You must provide a country code and price for each + country that your app is targeting. To view and edit the list of countries + that your app targets, open your app's Pricing & Distribution + page.
- 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 1990000
in the
- price field.
+ Each Price
value represents the cost of the item in
+ micro-units of the currency used in that country. Setting Auto Fill
+ Prices
to false
has the same effect as performing
+ the following sequence of actions:
+ For example, if you're offering your app for the following prices (all + taxes included) in other countries: +
+
+ ...you'd set the values of Auto Fill Prices
,
+ Country
, and Price
at the end of a row in the
+ CSV file as follows:
+
+false, BR; 6990000; RU; 129000000; IN; 130000000; ID; 27000000000; MX; 37000000; ++
Pricing Template ID
- If you use this value, you should set autofill to
- false
and leave the price column empty.
+ If an item is linked to a pricing template, you should set Auto Fill
+ Prices
to false
, and you shouldn't set a value for the
+ Price
column. If the item isn't linked to a pricing template,
+ you shouldn't set a value for the Pricing Template ID
; instead,
+ you should set Auto Fill Prices
, Country
, and
+ Price
based on how you want to set the in-app product's prices.
- This value represents the ID of the pricing template that you've linked to - the in-app product. This ID appears under a pricing template's name - on the Pricing template page. If an in-app product isn't - linked to a pricing template, its pricing_template_id value is - empty. + Setting this value has the same effect as navigating to an in-app product's + Managed Product Details page and linking the product's price to the + pricing template that has the same pricing template ID as the one specified + in the CSV file. This pricing template ID appears underneath a pricing + template's name on the Pricing template page.
- If you import a CSV file and choose to overwrite the product list, you can
- update the links between in-app products and pricing templates by changing
- the value of an in-app product's pricing_template_id. Leave the
- value empty to unlink an in-app product from all pricing templates.
+ If you import a CSV file, and you've checked the Overwrite existing
+ products checkbox in the Import In-app Products dialog,
+ you can update the links between in-app products and pricing templates. To
+ link the product to a specific pricing template, set the Pricing
+ Template ID
value to that pricing template's ID. To unlink an in-app
+ product from all pricing templates, don't set a value for its Pricing
+ Template ID
.
- Note: You can link up to 100 app prices or in-app product
- prices with a particular pricing template. Therefore, don't specify the same
- pricing_template_id value in more than 100 rows of your CSV file.
+ You can link up to 100 app prices or in-app product prices to a particular
+ pricing template. Therefore, don't specify the same Pricing Template
+ ID
value in more than 100 rows of a CSV file.
Table 1. Language codes you can use -with the locale field.
- -Language | -Code | -Language | -Code | -
---|---|---|---|
Chinese | -zh_TW | -Italian | -it_IT | -
Czech | -cs_CZ | -Japanese | -ja_JP | -
Danish | -da_DK | -Korean | -ko_KR | -
Dutch | -nl_NL | -Norwegian | -no_NO | -
English | -en_US | -Polish | -pl_PL | -
French | -fr_FR | -Portuguese | -pt_PT | -
Finnish | -fi_FI | -Russian | -ru_RU | -
German | -de_DE | -Spanish | -es_ES | -
Hebrew | -iw_IL | -Swedish | -sv_SE | -
Hindi | -hi_IN | --- | --- | -
To add a pricing template, do the following:
@@ -476,14 +623,14 @@ with the locale field. account. -- If you are adding your first pricing template, the Add a Pricing - Template banner appears. Select Add template to + If you are adding your first pricing template, the Add a Pricing + Template banner appears. Select Add template to create a new template. The new template's Pricing tab appears.
@@ -544,8 +691,8 @@ with the locale field. account.To link the price of a paid app to a pricing template, you follow a similar - process on the app's Pricing & Distribution page. + process on the app's Pricing & Distribution page.
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.
+type that's valid for the version of the In-app Billing API that your app uses.For details, refer to the documentation for the In-app Billing API. +href="{@docRoot}google/play/billing/api.html#producttype">In-app Billing API.
- Note: Test purchases don't have an orderId
- field. To track test transactions, you use the purchaseToken
- field instead. For more information about working with test purchases, see Note: When a user completes a test purchase, the
+ orderId
field remains blank. To track test transactions, use
+ the purchaseToken
field instead. For more information about
+ working with test purchases, see Testing In-app
Billing.
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 orderId
. Here's an
+Order Number as the value of orderID
. Here's an
example:
"orderId" : "GPA.1234-5678-9012-34567"
For transactions dated previous to 5 December 2012, Google checkout assigned
a Google Order Number and reported that number as the value of
-orderId
. Here's an example of an orderId
holding a
+orderID
. Here's an example of an orderID
holding a
Google Order Number:
"orderId" : "556515565155651"@@ -853,8 +1001,8 @@ app.
To locate the key for an app, follow these steps: