page.title=管理应用内结算 parent.title=In-app Billing parent.link=index.html @jd:body
如果您使用应用内结算,您就无需处理任何财务交易。不过,您仍需执行一些管理任务,包括在 Google Play 开发者控制台上创建和维护您的商品列表、注册测试帐户以及在需要时处理退款。
您必须有 Google Play 发布商帐户才能注册测试帐户。而且,您必须有 Google 电子钱包商家帐户才能创建商品列表以及向用户发放退款。如果您已有 Google Play 发布商帐户,则可以使用您的现有帐户,无需注册新帐户就能使用应用内结算。
如果您没有发布商帐户,可以在 Google Play 开发者控制台中以 Google Play 开发者的身份注册设置一个发布商帐户。如果您没有 Google 电子钱包商家帐户,也可以通过开发者控制台注册一个。
Google Play 开发者控制台为您发布的每个应用都提供一份商品列表。您可以使用 Google Play 的应用内结算功能销售商品,但前提是该商品已在应用的商品列表中列出。每个应用都有自己的商品列表,您不能在某个应用中销售其他应用的商品列表中列出的商品。
您可以点击开发者帐户中列出的应用内的应用内商品链接,访问该应用的商品列表(参见图 1)。只有当您拥有 Google 电子钱包商家帐户且该应用的清单中包含 com.android.vending.BILLING
权限时,应用内商品链接才会显示。
商品列表列出了您在应用内销售的商品(应用内商品、订阅内容或两者的组合)。对于每件商品,商品列表中都会包含商品 ID、商品说明和价格等信息。商品列表只存储应用内所售商品的相关元数据,而不会存储任何数字内容。应用内销售的数字内容的存储和发送是由您负责的。
图 1. 您可以点击“应用”主导航面板中的应用内商品链接,访问应用的商品列表。
您可以为所有已发布的应用或者 Alpha 或 Beta 渠道中的所有应用(这些应用上传并保存到开发者控制台)创建商品列表。不过,您必须有 Google 电子钱包商家帐户且该应用的清单中必须包含 com.android.vending.BILLING
权限。如果应用的清单中未包含此权限,您只能在商品列表中修改现有商品但不能向该列表添加新商品。要详细了解此权限,请参阅更新您应用的清单。
注意:过去,您可以通过上传未发布的“草稿”版本来测试应用,但现在系统已不再支持此功能。因此,您必须将应用发布到 Alpha 或 Beta 分发渠道,才能进行测试。有关详情,请参阅草稿应用不再受支持。
此外,一个应用包只能有一个商品列表。如果您为某个应用创建商品列表且使用多 APK 功能为该应用分发多个 APK,那么此商品列表将应用到与该应用商品详情相关联的所有 APK 版本。如果您使用的是多 APK 功能,则无法为各个 APK 创建单独的商品列表。
您可以通过两种方式向商品列表添加商品:通过应用内商品界面逐一添加商品(参见图 2);通过导入逗号分隔值 (CSV) 文件中的商品批量添加商品。如果您的应用只有几件应用内商品或您只是向商品列表添加几件测试商品,那么逐一添加商品这种方法就非常实用。如果您的应用有大量应用内商品,使用 CSV 文件的方法就较为实用。
注意:目前系统尚不支持批量上传包含订阅内容的商品列表。
要通过应用内商品界面向商品列表添加一件商品,请按以下步骤操作:
图 2. 通过“添加新商品”页面,您可以向应用的商品列表添加商品。
对于商品列表中的每件商品,您都必须输入以下信息:
每件商品的 ID 在应用的命名空间中都是独一无二的。商品 ID 必须以小写字母或数字开头,且只能由小写字母 (a-z)、数字 (0-9)、下划线 (_) 和点 (.) 组成。商品 ID“android.test”是系统预留的 ID,所有以“android.test”开头的商品 ID 都是如此。
此外,商品的商品 ID 创建后就无法再修改,而且您不能重复使用任何商品 ID。
商品类型可以是按用户帐户管理的商品、不受管理的商品或订阅内容。商品类型设置后就无法再更改。有关详情,请参阅下文中的选择商品类型。
商品的发布状态可以是已发布或未发布。为了让用户在结帐时可以看到所购商品,该商品的发布状态必须设置为已发布且该商品所属的应用必须已发布到 Google Play 上。
注意:这种情况并不适用于测试帐户。也就是说,对于测试帐户来说,即使应用未发布而商品已发布,测试帐户中的用户是可以看到该商品的。有关详情,请参阅测试应用内结算。
您可以使用“添加翻译”按钮,为您的应用内商品提供经过本地化的标题和说明。如果您希望 Google Play 根据您的默认语言为您翻译标题和说明,只需点击您要提供的语言即可。如果您想自行翻译成特定语言,也是可以的。默认情况下,应用内商品会沿用其所属应用的默认语言。
标题是对商品的简短描述,例如“沉睡药水”。每个标题在应用的命名空间中必须是独一无二的,且每件商品都必须有标题。标题在用户结帐时必须显示。为了获得最佳的显示效果,标题不应超过 25 个字符;不过,标题最长可达 55 个字符。
说明是对商品的详细描述,例如“立即让服用者陷入沉睡,但对愤怒的精灵无效”。每件商品都必须有一段说明,最长可达 80 个字符。
您必须提供一个以您本地货币为单位的默认价格。您也可以提供以其他货币为单位的价格,但前提是此货币所属的国家/地区是您的应用要定位的目标国家/地区。您可以在 Google Play 开发者控制台中的“修改应用”页面上指定目标国家/地区。
要指定以其他货币为单位的价格,您可以手动输入与每种货币对应的价格,也可以点击自动填充,让 Google Play 一次性将您的本地货币换算成目标货币(参见图 3)。
请注意,订阅型商品发布后就无法再更改其价格。
图 3. 为应用内商品指定其他货币。
要详细了解商品 ID 和商品列表,请参阅创建应用内商品 ID。要详细了解定价,请参阅应用内结算定价。
注意:请务必规划好您的商品 ID 命名空间。商品 ID 保存后就无法再重复使用或更改。
要使用 CSV 文件向商品列表批量添加商品,您需要先创建 CSV 文件。您在 CSV 文件中指定的数据值与您通过应用内商品界面手动指定的数据值相同(请参阅向商品列表逐一添加商品)。
如果您通过 CSV 文件导入和导出应用内商品,请记得提供含税价格。如果您使用自动填充,请提供不含税的默认价格,系统会自动填充含税的价格。如果您不使用自动填充,您提供的价格必须是含税价格。
注意:目前系统尚不支持批量上传包含订阅内容的商品列表。
CSV 文件使用逗号 (,) 和分号 (;) 来分隔数据值。逗号用来分隔主要数据值,分号用来分隔次要数据值。例如,CSV 文件的语法如下所示:"product_id","publish_state","purchase_type","autotranslate ","locale; title; description","autofill","country; price"
相关说明和使用详情如下所示。
等同于应用内商品界面中的“应用内商品 ID”设置。如果您指定的“product_id”在商品列表中已经存在,且您选择在导入 CSV 文件时覆盖商品列表,则 CSV 文件中指定的值就会覆盖现有商品的数据。覆盖功能不会删除商品列表中已列出但不包含在 CSV 文件中的商品。
等同于应用内商品界面中的“发布状态”设置。值可以是 published
或 unpublished
。
等同于应用内商品界面中的“商品类型”设置。值可以是 managed_by_android
(等同于应用内商品界面中的按用户帐户管理的商品)或 managed_by_publisher
(等同于应用内商品界面中的不受管理的商品)。
等同于选中应用内商品界面中的使用自动翻译填充字段复选框。值可以是 true
或 false
。
等同于应用内商品界面中的“语言”设置。您必须有一个默认语言区域项。默认语言区域必须是语言区域列表中的第一项,且必须包含“title”和“description”。如果除默认语言外您还想提供翻译版本的“title”和“description”,则必须使用下面的语法规则:
如果“autotranslate”为 true
,您必须按照以下格式指定默认语言区域、默认标题、默认说明及其他语言区域:
"true,"default_locale; default_locale_title; default_locale_description; locale_2; locale_3, ..."
如果“autotranslate”为 false
,您必须按照以下格式指定默认语言区域、默认标题、默认说明以及翻译后的标题和说明:
"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; ..."
请参见表 1,了解您可以在“locale”字段中使用的语言代码的列表。
等同于应用内商品界面中的“标题”设置。如果“title”包含分号,必须使用反斜杠进行转义(例如“\;”)。如果标题本身包含反斜杠,也应使用反斜杠进行转义(例如“\\”)。
等同于应用内商品界面中的“说明”。如果“description”包含分号,则必须使用反斜杠进行转义(例如“\;”)。如果说明本身包含反斜杠,也应使用反斜杠进行转义(例如“\\”)。
等同于点击应用内商品界面中的自动填充。值可以是 true
或 false
。用于指定“country”和“price”的语法视您使用的“autofill”设置而定。
如果“autofill”设为 true
,您只需指定采用本地货币的默认价格且必须使用以下语法:
"true","default_price_in_home_currency"
如果“autofill”设为 false
,您需要为每种货币指定“country”和“price”且必须使用以下语法:
"false", "home_country; default_price_in_home_currency; country_2; country_2_price; country_3; country_3_price; ..."
您为其指定价格的国家/地区。您只能列出您的应用所定位的国家/地区。国家/地区代码是按照 ISO 3166-2 的定义,由两个大写字母组成的 ISO 国家/地区代码(例如“US”)。
等同于应用内商品界面中的“价格”。此价格必须使用微单位指定。要将货币值换算成微单位,请用实际值乘以 1,000,000。例如,如果您要以 1.99 元销售某件应用内商品,则需要在“price”字段中输入 1990000。
表 1. 您可以在“locale”字段中使用的语言代码。
语言 | 代码 | 语言 | 代码 |
---|---|---|---|
中文 | zh_TW | 意大利语 | it_IT |
捷克语 | cs_CZ | 日语 | ja_JP |
丹麦语 | da_DK | 韩语 | ko_KR |
荷兰语 | nl_NL | 挪威语 | no_NO |
英语 | en_US | 波兰语 | pl_PL |
法语 | fr_FR | 葡萄牙语 | pt_PT |
芬兰语 | fi_FI | 俄语 | ru_RU |
德语 | de_DE | 西班牙语 | es_ES |
希伯来语 | iw_IL | 瑞典语 | sv_SE |
印地语 | hi_IN | -- | -- |
要导入您在 CSV 文件中指定的商品,请执行以下操作:
CSV 文件必须位于您的本地计算机上或连接到您计算机的本地磁盘上。
只有当 CSV 文件中的“product_id”值与商品列表中现有商品的应用内商品 ID 一致时,此选项才会覆盖现有商品的值。覆盖功能不会删除商品列表中已列出但不包含在 CSV 文件中的商品。
您还可以点击“应用内商品列表”页面上的导出为 CSV,将现有商品列表导出为 CSV 文件。如果您已将商品手动添加到商品列表,但现在想开始通过 CSV 文件管理该商品列表,此功能就非常有用。
商品的商品类型用来控制 Google Play 如何管理该商品的购买流程。商品类型有以下三种:“按用户帐户管理的商品”、“不受管理的商品”和“订阅内容”。但请注意,不同版本的应用内结算服务支持的商品类型不同,因此务必根据您的应用所用的应用内结算版本,选择合适的商品类型。
有关详情,请参阅应用内结算第 3 版或应用内结算第 2 版的相关文档。
应用内结算不允许用户向 Google Play 发送退款申请。应用内购买的退款事宜必须直接发送给您(应用开发者)。然后,您可以通过您的 Google 电子钱包商家帐户处理这笔退款。当您处理退款时,Google Play 会收到 Google 电子钱包发来的退款通知,并且 Google Play 会向您的应用发送退款消息。有关详情,请参阅处理 IN_APP_NOTIFY 消息和应用内结算定价。
重要提示:您不能使用 Google Wallet API 发放退款或取消应用内结算交易,而是必须通过您的 Google 电子钱包商家帐户手动执行此类操作。不过,您可以使用 Google Wallet API 检索订单信息。
当用户购买应用内商品时,Google 电子钱包会为此次交易分配一个永久有效且独一无二的订单号。Google Play 在购买流程结束时会向您提供该订单号,作为 PURCHASE_STATE_CHANGED
Intent 中的 orderId
字段的值。
在您的应用中,您可以使用该订单号作为此次应用内购买交易的通用标识符。购买后,您可以利用该订单号在对帐报表中跟踪此次交易,以及在提供客户支持时使用该订单号。
订单号是完全由数字构成的字符串,格式由 Google 电子钱包指定和管理。
对于发生在 2012 年 12 月 5 日及以后的交易,Google 电子钱包会分配一个商家订单号(而非 Google 订单号)并将该商家订单号报告为 orderID
的值。示例如下:
"orderId" : "12999556515565155651.5565135565155651"
对于发生在 2012 年 12 月 5 日之前的交易,Google Checkout 分配的是 Google 订单号并已将该编号报告为 orderID
的值。下面是使用 Google 订单号的 orderID
的示例:
"orderId" : "556515565155651"
通过 Google Play 开发者控制台,您可以设置一个或多个测试帐户。测试帐户是您在开发者控制台上注册为测试帐户的常规 Google 帐户。测试帐户已获得授权,可从您已上传到 Google Play 开发者控制台但尚未发布的应用中进行应用内购买。
您可以使用任意 Google 帐户作为测试帐户。如果您想让多位用户在应用上测试应用内结算但又不想让他们获得您的发布商帐户的登录凭据,测试帐户就非常有用。如果您想拥有并控制测试帐户,可以自行创建帐户,然后将凭据分发给您的开发者或测试者。
测试帐户有三条限制:
要向您的发布商帐户添加测试帐户,请按以下步骤操作:
Google Play 开发者控制台为每个应用都提供一个公用的许可密钥。要获取应用的密钥,请按以下步骤操作:
过去,开发者控制台为每个开发者帐户都提供一个公钥。为了将应用迁移到按应用分配的新公钥,开发者控制台将应用专用密钥设置为之前的开发者密钥。这样做可确保依赖于(之前的)开发者密钥的应用能与新公钥兼容。
图 4. 您可以在服务和 API 面板中找到各个应用的许可密钥。
如果您在实施应用内结算时有疑问或遇到问题,请与下表列出的支持资源联系(参见表 2)。将您的问题发布到正确的论坛上,可以更快获得所需支持。
表 2. 适用于 Google Play 应用内结算的开发者支持资源
支持类型 | 资源 | 主题范围 |
---|---|---|
开发与测试问题 | Google 网上论坛:android-developers | 应用内结算集成问题、有关用户体验的提示、对响应的处理、混淆代码、进程间通信 (IPC)、测试环境设置。 |
堆栈溢出:http://stackoverflow.com/questions/tagged/ android | ||
结算问题跟踪器 | 结算项目问题跟踪器 | 与应用内结算示例代码直接相关的错误和问题报告。 |
要了解如何向上述所列论坛发帖的一般信息,请参阅“资源”标签中的开发者论坛一文。