你的语言的资源
+我们翻译了以下一些网站资源,希望能帮助你开始设计、开发和发布你的Android应用程序到全球。
+ +检查清单
+ + + +Google Play 应用内结算
+ + + +工具
+ + + +培训
+ + + + ++此页面的资源将帮助你发布你的应用和游戏,获取用户,并从中获利。 +
+ +发布与推出
+ + +宣传工具
+ + +开发者支持
+ + +开发者消息
+ + +更多
+ + + + +检查清单
+ +
+ 在 Google Play 上发布应用以将其分发给用户之前,你需要准备好要发布的应用、进行测试并准备相关宣传材料。 +
+ ++ 本页面旨在帮助你了解发布流程,以及在 Google Play 上成功发布商品所需的准备工作,另外还总结了一些需要你在通过 Google Play 发布应用之前完成的任务,例如创建已签名的发布版应用包 (APK)、了解应用的要求以及为各个应用创建商品页和图形资源。 +
+ ++ 准备和发布任务已按先后顺序列出,这是为了让你对任务执行顺序有个大致了解。不过,你可以按适合自己的顺序来执行这些任务,也可以根据具体情况跳过某些步骤。 +
+ ++ 在完成发布之前的各项工作时,你可以使用各种支持资源。每一步中都提供了相关链接。 +
+ ++ 1. 了解发布流程 +
+ + ++ 在开始执行此检查清单中的各个步骤之前,你应抽时间查看和了解整个发布工作流程,并熟悉该流程的工作原理。特别要注意的是,你或你的开发小组需要按照所有 Android 应用通用的流程准备应用以进行发布。发布工作流程文档中详细说明了发布的工作原理以及如何准备 APK 以进行发布。 +
+ ++ 当你基本熟悉发布流程后,请继续阅读以了解在 Google Play 上发布应用时应注意哪些问题。 +
+ +相关资源
+ + + ++ 2. 了解 Google Play 政策和协议 +
+ + ++ 请务必了解并遵守你在注册时接受的 Google Play 计划政策。Google Play 要求强制执行这些政策,违反任何一条都可能导致你的应用被暂停。如果屡次违规,你的开发者帐户将被终止。 +
+ +相关资源
+ + + ++ 3. 测试质量 +
+ + ++ 在 Google Play 上发布应用之前,请务必确保这些应用在所有目标设备上都符合适用于所有 Android 应用的基本质量要求。你可以设置测试环境,然后测试应用是否符合一系列适用于所有应用的质量标准,以此来检查应用的质量。有关完整信息,请参阅应用核心质量指南。 +
+ ++ 如果你的应用适用于平板电脑,请确保其能为你的平板电脑用户提供引人入胜的丰富体验。请参阅平板电脑应用的质量指南,了解如何针对平板电脑优化应用的相关建议。 +
+ ++ 如果你要将应用发布到 Google Play for Education,则需确保这些应用适合中小学课堂且能提供非凡的教育价值。请参阅教育指南,了解教育类应用应具备哪些特征。 +
+ +相关资源
+ + + ++ 4. 确定应用的内容分级 +
+ + ++ Google Play 要求你为应用设置内容分级,以便 Google Play 用户了解应用的心智成熟度级别。发布应用之前,你应先确认自己要使用哪一分级。有以下四种内容分级可供选择: +
+ +-
+
-
+
所有人
+
+
+ -
+
心智成熟度-低
+
+
+ -
+
心智成熟度-中
+
+
+ -
+
心智成熟度-高
+
+
+ Android 用户可以在其 Android 设备上设置要浏览的心智成熟度级别,Google Play 会根据该设置对应用进行过滤。因此,你选择的内容分级会影响应用对用户的分发情况。你可以在开发者控制台中为应用指定(或更改)内容分级,无需在应用二进制文件中进行任何更改。 +
+ +相关资源
+ + + ++ 5. 确定分发国家/地区 +
+ + ++ 借助 Google Play,你可以控制将应用分发到哪些国家和地区。为了尽可能扩大覆盖面和潜在客户群,你通常会希望将应用分发到所有适用的国家和地区。不过,由于业务需求、应用要求或发布时的依赖关系,你可能需要从分发范围中排除一个或多个国家/地区。 +
+ ++ 请务必尽早确定目标国家/地区,因为这可能会影响: +
+ +-
+
-
+
是否需要对应用中的资源进行本地化。 +
+
+
+ -
+
是否需要对开发者控制台中的应用说明进行本地化。 +
+
+
+ -
+
某些国家/地区是否对应用有相应的法律要求。 +
+
+
+ -
+
时区支持、本地价格等。 +
+
+
+ 确定目标国家/地区后,你应该评估应用及其 Google Play 商品详情是否需要本地化,然后在预订的发布日期之前就开始本地化工作。 +
+ ++ 请参阅本地化检查清单,了解本地化流程中的关键步骤和注意事项。 +
+ +相关资源
+ + + ++ 6. 确认应用的总大小 +
+ + ++ 应用的总大小会对应用的设计以及在 Google Play 上的发布产生影响。目前,在 Google Play 上发布的 APK 最大不得超过 50MB。如果你的应用超过该上限或要提供辅助下载,则可以使用 APK 扩展文件。Google Play 会将扩展文件免费托管在其服务器基础架构上,并自动处理这些文件下载到设备的过程。 +
+ +-
+
-
+
在 Google Play 上发布的 APK 最大不得超过 50MB。 +
+
+
+ -
+
对于每个 APK,你最多可以使用两 (2) 个 APK 扩展文件,每个都不得超过 2GB。 +
+
+
+ 在分发大型应用时,使用 APK 扩展文件是一种经济高效的简便方法。不过,使用 APK 扩展文件需要你在应用二进制文件中稍作更改,因此你需要在创建发布版 APK 之前完成这些更改。 +
+ ++ 为了尽可能精简应用的二进制文件,请务必在构建发布版 APK 时运行 Proguard 工具或类似的代码混淆工具。 +
+ +相关资源
+ + + ++ 7. 确认应用的平台和屏幕兼容性范围 +
+ + +发布应用之前,请务必确保你的应用可在目标 Android 平台版本和设备屏幕尺寸上正常运行。 +
+ ++ 从应用兼容性角度来看,Android 平台版本由 API 级别定义。你应该使用 <minSdkVersion> 确认你的应用兼容的最低版本,因为这将影响已发布的应用在 Android 设备上的分发情况。 +
+ ++ 对于屏幕尺寸,你应该确认应用可在支持的各种屏幕尺寸和像素密度上正常运行且拥有精美外观。你还应按照支持跨屏中给出的建议,为多种屏幕尺寸提供相应的支持。如果你无法提供跨屏支持,请使用 <supports-screens> 声明应用支持的最小屏幕尺寸。Google Play 会据此对你的应用做出限制,只将其提供给屏幕尺寸大于或等于已声明尺寸的设备。 +
+ ++ 要更好地了解目前 Android 平台版本和屏幕尺寸在所有 Android 设备上的普及情况,请参阅设备信息中心图表。 +
+ +相关资源
+ + + ++ 8. 决定你的应用是免费还是付费 +
+ + +
++ 在 Google Play 上,你可以发布免费下载的应用和付费下载的应用。免费应用可供 Google Play 中的所有 Android 用户下载。付费应用仅供其所在国家/地区支持付费下载且已在 Google Play 中注册了付款方式(例如信用卡或运营商直接代扣)的用户下载。 +
+ ++ 决定你的应用是否免费非常重要,因为在 Google Play 上,免费应用必须始终免费。 +
+ +-
+
-
+
将应用发布为免费应用后,你无法再将其改成付费应用。不过,你仍能通过 Google Play 的应用内结算服务销售应用内商品和订阅。 +
+
+
+ -
+
如果你将应用发布为付费应用,则可以随时将其改成免费应用(但之后无法再将其改回为付费应用)。你也可以销售应用内商品和订阅。 +
+
+
+ 如果你的应用是付费应用或者你要销售应用内商品,你需要先设置 Google 电子钱包商家帐户,然后才能发布应用。 +
+ +相关资源
+ + + ++ 9. 考虑使用应用内结算 +
+ + ++ 借助 Google Play 应用内结算,你可以在应用中销售数字内容。你可以使用该服务销售众多内容,包括可下载内容(例如媒体文件或照片)和虚拟内容(例如游戏关卡或魔药)。借助应用内结算服务,你可以在应用内销售一次性购买的商品,还可以销售订阅。这有助于你在应用安装后的整个生命周期内都能获利。 +
+ ++ 如果你希望找到更多方法以通过应用获利并建立与用户的互动,则应考虑使用“应用内结算”或“Instant Buy”服务。这些服务深受用户和开发者的欢迎。要使用“应用内结算”和“Instant Buy”,你需要对应用的二进制文件进行更改。因此,你需要先完成更改并测试实施情况,然后才能创建发布版 APK。 +
+ +相关资源
+ + + ++ 10. 设置商品价格 +
+ + ++ 如果你的应用是付费应用或者你要销售应用内商品或实体商品,Google Play 可让你针对全球市场的用户为商品设置以不同货币为单位的价格。你可以分别使用不同货币设置价格,以便根据市场情况和汇率灵活调整你的价格。 +
+ ++ 发布应用之前,请想好如何为你的商品定价及以不同货币为单位的价格各是多少。之后,你可以通过开发者控制台设置以所有可用货币为单位的各种价格。 +
+ +相关资源
+ + + ++ 11. 开始本地化 +
+ + ++ 确定目标国家/地区后,你最好评估一下你的本地化需求,确保你的应用已国际化,并在预订的发布日期之前就开始本地化工作。 +
+ ++ 除了应用设计外,你至少还应考虑本地化工作中的三个方面: +
+ +-
+
-
+
本地化应用中的字符串、图片及其他资源。 +
+
+
+ -
+
本地化应用在 Google Play 商店中的商品详情。 +
+
+
+ -
+
本地化应用的商品详情中随附的图形资源、屏幕截图和视频。 +
+
+
+ 请参阅本地化检查清单,了解本地化流程中的关键步骤和注意事项。 +
+ ++ 要本地化你的商品详情,请先创建并完成应用标题、说明和宣传文字。将所有这些信息收集起来,然后发送给相关人员进行本地化。在应用更新时,你也可以选择翻译“最近更改”的文本。之后,你可以在开发者控制台中添加本地化的商品详情,或者选择让 Google Play 将你的商品详情自动翻译成你支持的语言。 +
+ ++ 要让你的应用详情吸引全球的用户,关键是创建本地化版本的宣传图片、屏幕截图和视频。例如,应用的置顶大图中可能包含文字,这些文字应翻译成相应语言以获得最佳效果。你可以为每种目标语言创建相应版本的宣传图片,并将它们上传到开发者控制台。如果你提供宣传视频,则可以创建本地化版本的视频,然后添加指向各目标语言版本的视频的链接。 +
+ ++ 完成翻译后,根据需要将翻译放入应用的资源中并测试能否正常加载。在上传资源和配置商品详情时,请保存应用的翻译版商品详情以供日后使用。 +
+ +相关资源
+ + + ++ 12. 准备宣传图片、屏幕截图和视频 +
+ + ++ 在 Google Play 上发布应用时,你可以提供各种高品质的图形资源,用来宣传你的应用或品牌。应用发布后,这些资源将显示在你的商品详情页、搜索结果及其他位置上。这些图形资源是商品详情页成功与否的关键,它们能吸引用户的注意力并让用户参与互动。因此,你应考虑聘请专业人士为你制作这些资源。屏幕截图和视频也相当重要,因为它们将展示应用的外观、使用或操作方式及其独特之处。 +
+ ++ 所有的图形资源均应精心设计以便足够醒目,并以多彩、有趣的方式突显你的应用或品牌。这些资源应该采用相同的徽标和图标,以便用户在下载应用后可以在“所有应用”启动器中找到你的应用。你的图形资源还应与你发布的所有应用的图形资源(也会显示在商品详情页上供用户查看)相互配套。 +
+ ++ 为了帮你将应用更有效地推广给全球用户,Google Play 允许你创建本地化版本的宣传图片、屏幕截图和视频并上传到开发者控制台中。当用户访问你应用的商品详情时,Google Play 会向其展示你针对该用户所用语言提供的宣传图片、屏幕截图和视频。 +
+ ++ 要本地化你的宣传图片,你可以翻译所有嵌入的文本、使用不同的图像或展示方式,或者改变你的营销方式,以尽可能满足使用特定语言的用户的需求。例如,如果你的置顶大图或宣传图片中包含嵌入的商品名称或宣传口号,则可以将名称或口号翻译成相应语言,然后添加到本地化版本的宣传图片中。 +
+ ++ 由于本地化的图形资源和视频非常重要,因此你应在预订的发布日期之前就开始创建并进行本地化。 +
+ +相关资源
+ + + ++ 13. 构建并上传发布版 APK +
+ + ++ 当确定你的应用符合界面、兼容性和质量要求后,你可以构建应用的发布版本。之后,你可以将发布版 APK 上传到开发者控制台并分发给用户。 +
+ ++ 所有应用的发布版 APK 准备流程都一样,无论应用采用哪种分发方式。一般情况下,该流程包括基本的代码清理和优化、构建和使用发布密钥签名以及最后的测试这几部分。 +
+ ++ 如需了解如何创建发布版应用的完整详情,请参阅准备发布。 +
+ ++ 准备好发布版 APK 后,你可以将其上传到开发者控制台。如果需要,你可以在发布之前将 APK 替换为较新的版本。 +
+ + ++ 14. 计划 Beta 版的发布 +
+ + ++ 简单的 Beta 测试 +
+ ++ Google Play 允许你在世界范围内设立 Alpha 版和 Beta 版测试者小组。下次登录到开发者控制台时请别忘记了解这一强大的功能。 +
++ 在发布应用之前收集用户的真实反馈是很有必要的,特别是发布新应用时,应该收集更多反馈。我们强烈建议你向主要目标市场的用户分发应用的预览版本,并让这些用户能够方便地向你提供反馈和报告错误。 +
+ ++ Google Play 可以帮助你为应用设置 Beta 测试计划。登录到开发者控制台并上传你的 APK 之后,你可以设立用户小组,以便进行应用的 Alpha 版和 Beta 版测试。你可以先进行小范围的 Alpha 版测试,然后推进到更大范围的 Beta 版测试。用户被添加到小组之后,他们可以访问你应用的商品详情并安装应用。 + Alpha 或 Beta 版本的用户不能留下评论或评分,因此你在 Google Play 上的评分不会受到不利影响。你需要安排具体途径以便用户提供测试反馈,例如 Google 论坛或 Google+。 +
+ ++ 收到的反馈可以帮助你调整界面、翻译和商品详情,以确保为用户提供优质体验。 +
+ + ++ 15. 填写应用的商品详情 +
+ + ++ 在 Google Play 上,应用的商品信息会在用户的 Android 设备或网络上的以下页面中显示给用户:应用的商品详情页;用户为详细了解应用而访问的页面;用户决定购买或下载应用的页面上。 +
+ ++ 为了让你宣传应用以及在商品详情页上与用户互动,Google Play 提供了许多方式,包括多彩的图片、屏幕截图和视频,本地化的说明、发布详情以及指向你其他应用的链接。当你准备发布应用时,请确保充分利用商品详情页提供的所有资源,让你的应用尽可能地引人入胜。 +
+ ++ 你应在预订的发布日期之前就开始规划商品页,准备本地化的说明以及高品质的图形资源、屏幕截图和视频等。 +
+ ++ 当临近预订的发布日期时,你应该熟悉开发者控制台中与商品详情配置页相关的所有字段、选项和资源。收集此页面上的信息和资源时,请将它们输入或上传到开发者控制台中,直到完成该页面,可以进行发布。 +
+ ++ 在开发者控制台中为应用设置地理位置定位后,请记得针对所有支持的目标语言添加本地化的商品详情、宣传图片等。 +
+ ++ 如果你的应用适用于平板电脑,请确保至少加入一张应用在平板电脑上运行时的屏幕截图,并在应用说明、版本备注、宣传活动及其他位置注重介绍你的应用支持平板电脑。 +
+ +相关资源
+ + + ++ 16. 在宣传活动中使用 Google Play 徽章和链接 +
+ + ++ Google Play 徽章是官方品牌标识,你可以使用该徽章向 Android 用户推广你的应用。使用 Google Play 徽章生成器可快速创建徽章,让用户从网页、广告、评论等链接到你的商品。你还可以使用特殊的链接格式,将用户直接链接到你的商品详情页、商品列表或搜索结果页。 +
+ ++ 为了帮你的应用在发布后获得用户关注,强烈建议你通过宣传活动来支持应用的发布,这些宣传活动应通过尽可能多的渠道、向尽可能多的国家/地区介绍你的商品。例如,你可以通过广告展示、社交网络或博客、视频及其他媒体、采访和评论,或者任何其他可用渠道推广应用的发布。 +
+ +相关资源
+ + + ++ 17. 最终检查和发布
+ + ++ 如果你认为已做好发布准备,请登录到开发者控制台,花些时间做最后几项检查。 +
+ ++ 请确保: +
+ +-
+
-
+
你的开发者资料准确无误且已与相应的 Google 电子钱包商家帐户相关联(如果你要销售商品)。 +
+
+
+ -
+
你上传的应用版本准确无误。 +
+
+
+ -
+
商品详情的各个方面都已准备完善,包括所有图形资源、屏幕截图、视频、本地化的说明等。 +
+
+
+ -
+
你已将应用设置为免费应用或付费应用。 +
+
+
+ -
+
你已设置目标国家/地区(以及运营商),并已确定以买家货币为单位的商品价格(如果适用) +
+
+
+ -
+
“兼容设备”显示你的应用当前覆盖的是你要定位的设备。如果不是,你应与开发小组联系以了解应用的要求和过滤规则。 +
+
+
+ -
+
你已提供指向你网站的正确链接以及正确的支持电子邮件地址。 +
+
+
+ -
+
你的应用未违反任何内容政策指南。 +
+
+
+ -
+
你已确认你的应用符合 Google Play 上的 Android 内容指南及美国出口法。 +
+
+
+ 你的应用现在随时可以发布了! +
+ ++ 如果你要发布更新,请务必阅读发布更新的相关要求。 +
+ ++ 当一切就绪后,请点击开发者控制台中的发布按钮。几个小时内,你的应用就会提供给广大用户,你的商品页将显示在 Google Play 上,供用户浏览、搜索或从宣传资料中链接到该页面。 +
+ +相关资源
+ + + ++ 18. 在发布后为用户提供支持 +
+ + ++ 发布应用或应用更新后,请务必为你的客户提供相关支持。及时周到的支持可让用户获得更好的体验,你的商品也就能获得更高的评分和更多的好评。如果你积极响应用户的需求和反馈,他们可能会与你的应用进行更多互动,还会向其他人推荐你的应用。如果你运用多种方式开展宣传活动,这种效果在应用发布后会更加明显。 +
+ ++ 你可以通过多种方式与用户保持联系并为其提供支持。其中最常见的就是在商品详情页上提供你的支持电子邮件地址。除此之外,你还可以提供其他支持方式,例如论坛、邮寄名单或 Google+ 信息页。Google Play 小组会为用户提供下载、安装和付款方面的支持,但其他方面的问题则由你自行解决。由你向用户提供支持的示例包括:功能请求、应用的使用问题以及兼容性设置问题。 +
+ ++ 发布应用后,你应: +
+ +-
+
-
+
经常查看你应用的商品详情页上的评分和评论。注意反复出现的主题,这可能表示存在错误或其他问题。 +
+
+
+ -
+
关注新发布的 Android 平台版本,因为你应用的兼容性设置可能需要更新。 +
+
+
+ -
+
在你的网站上放置一个指向支持资源的链接,并设置其他支持方式,例如论坛。 +
+
+
+ -
+
在商品详情页上提供相应的支持电子邮件地址并回复用户发来的电子邮件。 +
+
+
+ -
+
除了 Google Play 提供的自动退款窗口外,请诚心制定你的退款政策,因为满意的用户将来更有可能购买你的商品。 +
+
+
+ -
+
确认并解决你应用中出现的问题。保持公开透明并主动在商品详情页上列出已知问题是明智有益之举。 +
+
+
+ -
+
尽可能经常发布更新,但不要牺牲质量,也不能过于频繁以免干扰用户。 +
+
+
+ -
+
每次更新时,请务必总结一下变更内容。你可以在开发者控制台中输入此信息。用户会查看这些信息并认为你是在努力提高应用的质量。 +
+
+
相关资源
+ + diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd new file mode 100644 index 0000000000000..b2ba2ff86ae91 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd @@ -0,0 +1,698 @@ +page.title=本地化检查清单 +page.metaDescription=把握 Android 和 Google Play 所提供的全世界观众的优势。阅读此清单以获得如何将产品送到世界各地的市场的概述。 +page.image=/distribute/images/localization-checklist.jpg +page.type="배포" + +@jd:body + +检查清单
+-
+
- 1. 确定目标语言和语言区域 +
- 2. 本地化设计 +
- 3. 管理字符串本地化 +
- 4. 翻译界面字符串和其他资源 +
- 5. 测试已本地化的应用 +
- 6. 准备国际化发布 +
- 7. 在发布之后为国际用户提供支持 +
++ Android 和 Google Play 让你可以面向全球的用户提供应用,其中日本、韩国、印度、巴西和俄罗斯等国家/地区的目标用户群正在迅速扩展。有鉴于此,我们强烈建议你本地化你的应用,因为这样可以最大程度地增加应用的分发范围,获得全球各地用户的评分。 +
+ ++ 本地化涉及到很多任务,贯穿应用开发的整个周期,因此务必要提前做出规划。本文旨在帮助你了解本地化的主要方面,以便你做好准备,通过 Google Play 向全球成功发布自己的应用。 +
+ ++ 1. 确定目标语言和语言区域 +
+ + ++ 确定要向哪些国家/地区发布你的应用并了解这些国家/地区所用的语言,是准备本地化的过程中基本且重要的一步。对于具有巨大市场商机、但英语或其他国际性语言并不普及的国家/地区来讲,将应用本地化尤为重要。 +
+ ++ 对于国际用户,你可以从以下这三个主要方面来管理自己的应用:国家/地区、语言区域和语言。其中,语言是本地化的主要考虑因素(语言区域也很重要,因为日期的格式、时间、货币及其他类似信息也都存在差异)。用户可以控制其 Android 设备上使用的语言和语言区域,反过来这些因素也会影响应用的显示方式。 + +
+ ++ 通常来说,你首先要根据整体市场规模和商机、应用类别、竞争格局、本地定价和金融状况等因素来确定要定位的国家/地区,然后再基于你的国家/地区定位,确定应用要支持的语言。 +
+ ++ 随后,你可以决定是针对目标国家/地区的部分语言还是全部语言进行本地化。合理的做法是,先针对一种主要的地区性语言进行本地化,然后随着用户群的扩大增添更多语言。 +
+ ++ 确定目标语言之后,你就可以安排开发、翻译、测试和市场营销工作重点围绕这些市场展开。 +
+ +相关资源
+ + + ++ 2. 本地化设计 +
+ + +确定本地化的目标语言之后,请评估在应用中支持这些语言需要完成哪些工作并提早做出规划。要考虑的事项包括每种语言的词汇扩展、脚本要求、字符间距、换行限制、支持文字“从左到右”和“从右到左”,以及其他可能遇到的问题。 +
+ ++ 设计一套灵活的布局 +
+ ++ 在创建布局时,确保包含文字的界面元素拥有充足的空间。最好在满足你的语言的基础上多出部分空间(通常留出 30% 的空间)以适应其他语言。 +
+ ++ 另外,元素应能够横向或纵向扩展,以便可以适应不同宽度和高度的界面字符串或输入文本。任何目标语言的字符串都不应与边框或屏幕边缘重叠。 +
+ ++ 如果界面设计得当,通常你就可以针对所有支持的语言使用一套布局。有关详情,请参阅构建灵活的界面。 +
+ ++ 根据需要使用备用布局 +
+ ++ 如果你的界面不能很好地适应某种目标语言,那么你可以单独为该语言创建一套备用布局。Android 可让你很轻松地针对特定语言、语言区域、屏幕尺寸等,声明要加载的多种布局和其他资源,只需使用相应的资源限定符做出标记即可。虽然备用布局可提供相应的灵活性,但使用它会导致随着时间推移,应用的维护难度增加。因此一般来说,建议你最好使用一套更灵活的布局。 +
+ ++ 支持 RTL 布局和文本 +
+ ++ 如果你要发布应用的国家/地区使用从右到左 (RTL) 的文字阅读方向,则你应该考虑尽可能地支持 RTL 布局以及相应的文本显示和编辑。 +
+ ++ Android 4.1 引入了对双向文字的有限支持,支持应用以从左到右 (LTR) 和从右到左 (RTL) 的方向显示和编辑文本。Android 4.2 增加了对 RTL 布局的完整原生支持(包括布局镜像),因此你可以为所有用户提供一致的优质体验。 +
+ ++ Android 4.2 用户至少可以轻松添加基本的 RTL 布局镜像,这对满足 RTL 用户需求大有帮助。 +
+ ++ 针对日期、时间、数字和货币采用系统提供的格式 +
+ ++ 如果你的应用需要指定因语言区域不同而不同的日期、时间、数字、货币和其他实体,请务必使用系统提供的格式,而不要使用应用专有的格式。请注意,并非所有的语言区域都使用相同的千位分隔符、小数点或百分比符号。 +
+ ++ Android 提供了多种实用工具,用于在不同的语言区域中设置格式、进行转换:例如适用于日期的 DateUtils 和 DateFormat;适用于数字和货币的 String.format() 或 DecimalFormat;适用于电话号码的 PhoneNumberUtils 等。 +
+ ++ 假定用户的语言区域并据此强制设置格式,会导致在用户更改语言区域时引发问题。强烈建议你使用系统提供的格式和各种实用工具。 +
+ ++ 包括一套完整的默认资源 +
+ ++ 提供一整套默认资源可以确保无论是何种语言或语言区域,你的应用都能正常运行。应用的默认资源是指没有使用任何语言或语言区域限定符标记的资源,例如 res/drawable/ 和 res/values/ 中存储的资源。如果你的应用试图加载目前的语言或默认资源集中没有的资源,则会崩溃。 +
+ ++ 无论你在应用中使用的默认语言是什么,请务必在默认的资源目录中存储相关的布局、图形内容和字符串,且不使用语言或语言区域限定符。 +
+ +相关资源
+ + + ++ 3. 管理字符串的本地化
+ + ++ 妥善管理应用的界面字符串非常重要,这样你才能为用户提供优质的体验,并让本地化工作事半功倍。 +
+ ++ 将所有字符串放入 strings.xml 中 +
+ ++ 在构建应用时,请注意不要硬编码任何字符串,而是在默认的 strings.xml 文件中将所有字符串声明为资源,这样便于更新和进行本地化。strings.xml 文件中的字符串可以抽取出来、进行翻译,然后再集成回应用(使用相应的限定符),无需对编译后的代码进行任何更改。 +
+ ++ 如果你生成带有文字的图片,也请将这些字符串放入 strings.xml,并在翻译之后重新生成图片。 +
+ ++ 遵循针对界面字符串的 Android 指南 +
+ ++ 在设计和开发界面时,请务必密切注意你与用户交流的方式。一般而言,使用友好而不失简洁、简明而且精炼的风格,并且整个界面应采用一致的风格。
+ ++ 请务必阅读并遵循写作风格和字词选择方面的 Android 设计建议。这样做能够让你的应用更加美观,并且有助于用户快速理解你的界面。 +
+ ++ 另外,请尽可能使用 Android 标准术语,例如对于界面元素,使用“操作栏”、“选项菜单”、“系统栏”、“通知”等。确保 Android 术语的正确性和一致性可让翻译工作更容易进行,从而为用户带来更好的最终产品。 +
+ ++ 为声明的字符串提供充分的上下文 +
+ ++ 在 strings.xml 文件中声明字符串时,确保清楚说明使用该字符串的上下文。此信息对翻译人员来说十分重要,有助于提高翻译质量,也有助于你始终有效地管理字符串。 +
+ ++ 下面是一个例子: +
+ +<!-- 用于提交表单的操作。此文本显示在可容纳 30 个字符的按钮上-->+
<string name="login_submit_button">Sign in</string>
+ 你需要提供的上下文信息包括: +
+ +-
+
-
+
+ 字符串有何用途?它在何时/哪里呈现给用户? +
+
+
+ -
+
+ 它在布局中的什么位置?例如,如果它是按钮,那么翻译的灵活性就不如文本框。 +
+
+
+ 标记不应翻译的信息部分 +
+ ++ 有时候字符串中包含不应被翻译为其他语言的文本。常见的示例包括代码、某个值的占位符、特殊符号或名称。在准备翻译字符串时,请查找并标记应该保留原样而不用翻译的文本,这样翻译人员就不会更改这些内容。 +
+ +
+ 要标记不应翻译的文本,请使用 <xliff:g> 占位符标记。以下示例标记可确保文本“%1$s”在翻译过程中不会被更改(否则这条消息会被破坏):
+
<string name="countdown">+
<xliff:g id="time" example="5 days>%1$s</xliff:g>until holiday
</string>
+ 在声明占位符标记时,请务必添加说明此占位符用途的 ID 属性。如果你的应用稍后会替换占位符值,请务必提供示例属性来说明预期用途。 +
+ ++ 以下是其他一些占位符标记的示例; +
+ ++<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + +<!-- 特殊 Unicode 符号的占位符示例 --> + +<string name="star_rating">Check out our 5 + + <xliff:g id="star">\u2605</xliff:g> + +</string> + +<!-- 网址的占位符示例 --> + +<string name="app_homeurl"> + + Visit us at <xliff:g id="application_homepage">http://my/app/home.html</xliff:g> + +</string> + +<!-- 名称的占位符示例 --> + +<string name="prod_name"> + + Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g> + +</string> + +<!-- 实值的占位符示例 --> + +<string name="promo_message"> + + Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>” to get a discount. + +</string> + +... + +</resources> ++ + +
相关资源
+ + + ++ 4. 翻译界面字符串和其他资源 +
+ + ++ 将应用的界面字符串和资源翻译为目标语言是本地化过程中的关键阶段,需要给予最多关注并做出规划。 +
+ ++ 我们建议你与专业翻译人员合作(请参阅聘请专业翻译公司),以确保获得高品质的翻译,提升应用的价值。你也可以选择机器翻译,但用户体验不如人工翻译。 +
+ ++ 准备翻译 +
+ ++ 翻译工作的质量在一定程度上取决于你为翻译提供的源资料,因此请确保你的 strings.xml 文件条理清晰、注释完善,而且完全准确。 +
+ ++ 以下是一些在翻译之前准备字符串的方法: +
+ +-
+
-
+
+ 确保字符串格式的正确性和一致性。 +
+
+
+ -
+
+ 遵循上文管理字符串的本地化中列出的有关字符串的建议。 +
+
+
+ -
+
+ 清理 strings.xml 文件,删除不用的字符串。 +
+
+
+ -
+
+ 在文件中加入注释,以标识所有者、来源和文件版本,以及针对翻译人员的特别说明。 +
+
+
+ -
+
+ 提供现有翻译(如果有的话),用 zip 文件或其他文件包发送给翻译人员。 +
+
+
+ -
+
+ 标识需要翻译的图形内容或其他资源,并将它们加入给翻译人员的文件包中。 +
+
+
+ -
+
+ 此外,考虑翻译你的应用在 Google Play 商店的商品详情(应用标题和说明、发行说明等)以及其他国际化营销资料。 +
+
+
+ -
+
+ 创建术语表,用来解释你的产品、市场或所用重要技术中出现的关键术语的含义和用途。将列表添加到给翻译人员的文件包中。 +
+
+
+ 发送字符串进行翻译 +
+ ++ 在开发阶段的初期,你就可以与专业的翻译供应商联系,商定费用和周转时间,而且你的费用应该包含多次反复工作的费用。你可以寻找在线翻译供应商或直接使用 Google Play 开发者控制台提供的翻译服务(请参阅聘请专业翻译公司)。 +
+ ++ 翻译完成后,请进行初步检查。查看所有文件是否均已翻译,是否存在潜在编码问题,并确保声明格式未被破坏。 +
+ ++ 如果一切正常,请小心地将已本地化的目录和文件移回应用的资源中。请务必使用正确的语言和语言区域限定符标记目录,以便以后能够正确加载这些目录。 +
+ ++ 在将翻译合并到你的应用之后,请开始测试已本地化的应用。 +
+ ++ 通过 Google Play 聘请专业翻译公司 +
+ ++ Google Play 应用翻译服务可以帮助你为应用快速寻找和购买翻译服务。在开发者控制台中,你可以浏览已由 Google 认证的第三方供应商列表,这些供应商能够以有竞争力的价格为你提供高品质的翻译。你可以上传要翻译的字符串,选择翻译的目标语言,并根据时间和价格选择翻译供应商。 +
+ ++ 购买翻译之后,你会收到来自供应商的电子邮件。这是你与供应商之间的直接业务往来,你需要直接与供应商合作,管理翻译流程并解决所有支持问题。 +
+ +
+相关资源
+ + + ++ 5. 测试已本地化的应用 +
+ + ++ 收到翻译的字符串和资源并放入应用之后,你需要对应用进行测试,确保应用能够向国际用户发布。 +
+ ++ 人工测试可以帮助你发现布局和字符串中的本地化问题,这些问题可能影响用户满意度,最终影响应用的用户评分。 +
+ ++ 设置测试环境 +
+ ++ 要测试已本地化的应用,你需要根据你的目标市场和适配设备,设置包含多种设备(或虚拟设备)和屏幕尺寸的测试环境。请注意,不同地区可用的设备可能不同。如果可能,请将你的测试设备设置为用户能够使用的实际设备。 +
+ ++ 查找常见的本地化问题 +
+ ++ 在每台测试设备上,在“设置”中设定语言或语言区域。安装并启动应用,然后浏览所有界面流程、对话框和用户互动。在需要输入内容的部分输入文本。要查找的内容包括: +
+ +-
+
-
+
+ 截断的文本,或者与界面元素或屏幕边缘重叠的文本 +
+
+
+ -
+
+ 不合理的换行 +
+
+
+ -
+
+ 错误的字词中断或标点符号错误 +
+
+
+ -
+
+ 错误的字母顺序排序 +
+
+
+ -
+
+ 错误的布局方向或文字方向 +
+
+
+ -
+
+ 未翻译的文本。如果显示的是默认字符串而不是翻译过的字符串,那么你可能忽略了这些字符串的翻译或是使用了错误的语言限定符标记了资源目录。 +
+
+
+ 如果翻译后的字符串变得过于臃肿,不能适应布局,建议你尝试简化默认文本、简化译文文本或调整默认布局。如果问题仍然不能解决,请为该语言创建自定义布局。 +
+ ++ 测试默认资源 +
+ ++ 使用所有目标语言和语言区域测试应用之后,请务必使用不支持的语言和语言区域再次测试。这有助于确保你的应用包括完整的默认字符串和资源,可供所有用户使用,不论用户设置了哪种首选语言。 +
+ ++ 邀请母语使用者进行复查 +
+ ++ 在测试过程中或之后,建议你邀请相应的母语使用者对本地化的应用进行复查。一种方法是让目标地区的用户进行 Beta 版测试,Google Play 可以帮助你开展这项工作。
+ + ++ 6. 准备国际化发布 +
+ + ++ 翻译应用是本地化过程中的关键部分,但是要让你的产品吸引用户、获得关注,你应该做好在目标国家/地区发布应用的准备,并针对国际用户制定更广泛的发布和营销计划。 +
+ ++ 本地化你的 Google Play 商品详情 +
+ ++ 本地化你的 Google Play 商品详情 +
+ ++ Google Play 商店的商品详情是国际用户对你应用的第一印象。你应该向所有用户重点介绍应用的优势!在开发者控制台中本地化商品详情时,需要本地化的内容包括:
+ +-
+
- 应用标题和说明 + + +
- 应用在手机和平板电脑上的屏幕截图 + + +
- 宣传图片和视频 + +
+ 如果你想让应用在国际市场中取得成功,则务必要本地化你的 Google Play 商品详情。你可以在开发者控制台中管理已本地化的商品详情。 +
+ ++ 在发布之前,请决定你的应用标题、说明、宣传文字、营销主题和计划以及其他文字和图片。请提早发送你的商品详情文字和图片进行翻译,确保这些内容在 Beta 版测试开始时就准备就绪。收到译文后,你可以通过开发者控制台添加译文。 +
+ ++ Google Play 中的商品详情翻译 +
+ ++ 你可以使用 Google Play 上的应用翻译服务翻译你的商品详情。准备包含商品详情信息的 XML 文件,并像上传 strings.xml 文件一样上传此文件(请参阅聘请专业翻译公司) +
++ 另外,你已经创建了优秀的本地化应用,那么就应该让用户知晓。截取各个语言版本的界面在手机和平板电脑(7 英寸和 10 英寸)上的截图。你可以将所有目标语言版本的屏幕截图上传到开发者控制台。这对于使用其他语言浏览你的应用商品详情的用户来说有很重要的参考价值。 +
+ ++ 你还有必要准备本地化版本的宣传图片和视频。例如,你应用的置顶大图可能包括应该翻译的文字,翻译之后能达到最佳效果,或者你可能希望在某个国家/地区呈现与众不同的视觉效果。你可以为每种目标语言创建相应版本的宣传图片,并将它们上传到开发者控制台。如果你提供宣传视频,则可以创建本地化版本的视频,然后添加指向各目标语言版本的视频的链接。 +
+ ++ 在主要国家/地区计划 Beta 版的发布 +
+ ++ 简单的 Beta 测试 +
+ ++ 现在,Google Play 允许你在世界范围内设立 Alpha 版和 Beta 版测试者小组。下次登录到开发者控制台时请别忘记了解这一强大的功能。 +
++ 在发布应用之前收集用户的真实反馈是很有必要的做法,特别是使用新的语言、在新的国家或地区发布应用时,应该收集更多反馈。在这种情况下,我们强烈建议你向主要目标市场的用户发布应用的预览版本,以便这些用户能够方便地向你提供反馈和报告错误。 +
+ ++ Google Play 可以帮助你为应用设置 Beta 测试计划。登录到开发者控制台并上传你的 APK 之后,你可以设立用户小组,以便进行应用的 Alpha 版和 Beta 版测试。你可以先进行小范围的 Alpha 版测试,然后推进到更大范围的 Beta 版测试。 +
+ ++ 用户被添加到小组之后,他们可以访问你应用的商品详情并安装应用。Alpha 或 Beta 版本的用户不能留下评论或评分,因此你在 Google Play 上的评分不会受到不利影响,不过这意味着你需要为测试者设置一种机制以便他们提供反馈:不妨创建一个 Google+ 页面或 Google 网上论坛。 +
+ ++ 收到的反馈可以帮助你调整界面、翻译和商品详情,以确保为用户提供优质体验。 +
+ ++ 计划国际化营销 +
+ ++ 为了在更多国家/地区获得最高的关注度,请考虑制定国际化营销或广告计划。计划的覆盖范围取决于你能支持的预算,但一般来说,在发布时和发布后针对特定国家/地区开展营销是经济、高效的措施。 +
+ ++ 创建本地化的 Google Play 徽章 +
+ ++ 如果你正在准备国际化营销,请务必加入本地化的 Google Play 徽章,让用户知道你是在 Google Play 上发布应用的。你可以使用徽章生成器快速构建本地化的徽章,然后用到你的网站或营销材料中。你还可以获得高分辨率的资源。 +
+ ++ 创建本地化的 Device Art +
+ ++ 如果你有应用在 Android 设备上运行的产品截图,请确保这些截图拥有精美外观,能够反映应用在 Android 设备上的最新状态。为帮助你准备高品质的营销材料,请使用 Device Art Generator,只需拖放即可快速获得在 Nexus 设备上的屏幕截图。 +
+ ++ 查看你的优化提示 +
+ ++ 在准备发布时,请务必登录到开发者控制台,查看为你的应用提供的“优化提示”。通过优化提示,你可以了解本地化的商品详情是否有所遗漏,还可以获得其他有用的提示,帮助你实现成功的本地化发布。 +
+ +相关资源
+ + + ++ 7. 在发布后为国际用户提供支持 +
+ + ++ 在国际范围内发布应用之后,你应该准备好为各种语言和时区的用户提供支持。能为国际用户提供什么样的支持取决于你的预算,不过你至少要在发布后认真查看应用获得的评分、评论和下载统计信息。 +
+ ++ 以下是一些建议: +
+ +-
+
-
+
+ 使用开发者控制台中的应用统计信息比较不同语言和国家/地区的下载量、安装量、卸载量和评分。如果某些语言或国家/地区的下载量和评分相对落后,请考虑采取一些措施来改善你的产品或改变营销方法。 +
+
+
+ -
+
+ 定期查看评论。Google Play 会为你翻译所有用户评论,因此你可以及时了解国际用户对应用的评价,以及用户喜欢的功能和困扰他们的问题。通过查看评论,你可以发现可能影响特定国家/地区用户的技术问题,然后进行修正并更新你的应用。 +
+
+
+ -
+
+ 尽可能回复评论。使用用户的语言或通用语言与用户互动是一种很好的做法。如果不可行,你可以尝试使用翻译工具,不过效果可能会打折扣。如果你应用的某种语言版本十分受欢迎,请考虑由该语言的母语使用者帮助你为用户提供支持。 +
+
+
+ -
+
+ 确保提供链接,让用户能够转到你网站上的所有支持资源。考虑建立按语言分组的用户小组、Google+ 社区或其他支持论坛。 +
+
+
+ 按照这里介绍的做法本地化你的应用、向国际用户宣传和营销你的应用,并为用户提供持续的支持,你的应用就能吸引很多新用户并始终赢得他们的青睐。 +
+ ++ 请务必阅读发布检查清单,以详细了解如何在 Google Play 上计划、构建和发布你的应用。 +
+相关资源
+ + diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/promote/badges.jd b/docs/html-intl/intl/zh-cn/distribute/tools/promote/badges.jd new file mode 100644 index 0000000000000..1c8216136cdaf --- /dev/null +++ b/docs/html-intl/intl/zh-cn/distribute/tools/promote/badges.jd @@ -0,0 +1,278 @@ +page.title=Google Play 徽章生成器 +page.image=/images/gp-badges-set.png +page.metaDescription=点击几下就可以为你的应用程序构建徽章,或者下载为各种语言本地化的高分辨率徽章资产。 + +@jd:body + +借助 Google Play 徽章,你可以在在线广告、宣传材料或任何提供应用链接的地方使用 Google 的官方品牌标识,向大众推广你的应用。
+ +请在下面的表单中输入你应用的应用包名称或发布者名称,选择徽章样式,点击“制作我的徽章”,然后将 HTML 代码粘贴至你的网页内容中。
+ +如果你要为应用创建宣传网页,则还应使用 Device Art Generator,以方便快捷地将应用截图嵌入到设备效果图中。
+ +有关 Google Play 徽章及其他品牌资源的使用指南,请参阅品牌指南。
+ + + + + + + +请复制以下 HTML 代码并将其粘贴到你的网站上:
+ + +试试以下内容:
+ +我们建议你在 Android 应用的宣传资料中使用 Android 和 Google Play 品牌。只要你遵循相关指南,就可以使用本页中的图标和其他资源。
+ +对 Android 或 Google Play 品牌的使用必须经过 Android 合作伙伴营销小组的审核。请使用 Android 和 Google Play 品牌权限咨询表单提交你的营销资料以供审核。
+ +Android
+ +以下是关于 Android 品牌和相关资源的指南。
+ + +在文本中使用 Android
+ +
+ -
+
- Android™ 首次出现在广告素材中时应标注商标符号。 +
- Android 应始终采用大写形式,且一律不得使用复数或所有格形式。 +
- “Android”不能在应用或配套产品(包括手机、平板电脑、电视、扬声器、耳机、手表及其他设备)的名称中使用。不过,你可以使用“for Android”。
+
-
+
- 不正确:“Android MediaPlayer” +
- 正确:“MediaPlayer for Android” +
如果与你的徽标一起使用,则“for Android”不应超过徽标大小的 90%。这种用法第一次出现时,后面应标注 TM 符号,即“for Android™”。
+
+ - 如果后跟一个合适的通称,Android 可以用作描述词(即用“Android”表达“Android 平台”的意思)。
+
-
+
- 不正确:“Android MediaPlayer”或“Android XYZ 应用” +
- 正确:“Android 功能”或“Android 应用” +
+
每次使用 Android 名称时,你的资料中都应注明以下归属信息:
+Android 是 Google Inc. 的商标。+ + +
Android 机器人
+ +
+
+ 100x118 |
+ 200x237
+ Illustrator 文件 (.ai)
你可以在营销资料中随意使用、复制和修改 Android 机器人。对于印刷版本,Android 机器人的颜色值为 PMS 376C;对于在线版本,请使用十六进制颜色 #A4C639。
+ +在使用 Android 机器人或其变体形式时,请遵循知识共享署名 3.0 许可的条款使用正确的归属信息:
+ +Android 机器人是在 Google 原创及共享成果的基础上再创作或修改而成,须遵照知识共享署名 3.0 许可所述条款付诸应用。+ +
你不得通过将 Android 机器人徽标或其变体形式加入自己的公司徽标或商家名称,来提出商标申请。我们希望确保 Android 机器人可供所有人使用。
+ + +Android 徽标
+ +
+ 不得使用 Android 徽标。
+ +不得使用 Android 徽标专用的字体。
+ +Google Play
+ + +以下是关于 Google Play 品牌和相关资源的指南。
+ +在文本中使用 Google Play
+ +在文本中,请务必为首次出现或位于显著位置的 Google Play™ 加上 TM 符号。
+ +在提及移动设备体验时,除非相应文本中是很明显的说明性内容,否则请使用“Google Play”。例如,营销资料的标题可以是“从 Google Play™ 下载我们的游戏”,但是说明性内容可以是“使用 Google Play™ 商店应用下载我们的游戏”。 + +
每次使用 Google Play 名称或图标时,你的资料中都应注明以下归属信息:
+ +Google Play 是 Google Inc. 的商标。+ + + + +
Google Play 商店图标
+ +你可以使用 Google Play 商店图标,但不得修改它。
+ +如上文所述,在文案中提及 Google Play 商店应用时,请使用全称:“Google Play 商店”。但直接标注 Google Play 商店图标时,可以只使用“Play 商店”,以便与设备上显示的图标标签一致。
+ + +Google Play 徽章
+ + + + + +你可以在网站和宣传资料中使用“即刻获取 Google Play”和“即刻获取 Android 应用 Google Play”徽标作为徽章,以指向你在 Google Play 上的商品。你也可以使用其他 Google Play 徽章格式,以及用于音乐、图书、杂志、电影和电视节目的徽章。要申请这些徽章,请使用 Android 和 Google Play 品牌权限咨询表单。
+ +-
+
- 请不要修改徽章图片的颜色、比例、间距或其他任何方面。 + +
- 当与其他应用市场的徽标一起使用时,Google Play 徽标尺寸不应小于这些徽标的尺寸。 +
- 在线使用时,徽章应链接至以下内容之一:
+
-
+
- 由你发布的商品的列表,例如:
+ http://play.google.com/store/search?q=publisherName +
+ - Google Play 中相应应用的商品详情页,例如:
+ http://play.google.com/store/apps/details?id=packageName +
+
+ - 由你发布的商品的列表,例如:
要快速创建链接至你在 Google Play 上的应用的徽章,请使用 Google Play 徽章生成器(支持 40 多种语言)。
+ +要创建自定义尺寸的徽章,请下载支持 40 多种语言的 Google Play 徽章的 Adobe® Illustrator® (.ai) 文件。
+ +要详细了解如何链接至 Google Play 中的商品详情页,请参阅链接至你的商品。
+ +营销审核和品牌咨询
+ +请使用 Android 和 Google Play 品牌权限咨询表单提交相关的营销审核或品牌咨询。一般情况下,我们至少需要一周时间才能做出回复。
+ + diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/promote/device-art.jd b/docs/html-intl/intl/zh-cn/distribute/tools/promote/device-art.jd new file mode 100644 index 0000000000000..b6517b356d3d9 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/distribute/tools/promote/device-art.jd @@ -0,0 +1,675 @@ +page.title=Device Art Generator +page.image=/images/device-art-ex-crop.jpg +page.metaDescription=为了更好看的宣传图片和改善视觉语境,拖放你的应用程序的屏幕截图到真实设备的图稿。 + +@jd:body + +你可以使用 Device Art Generator 方便快捷地将应用截图嵌入到真实设备的效果图中。这样,当用户在你的网站上或其他宣传材料中看到你的应用截图时,就能更加直观地了解应用的内容环境
+ +注意:请勿将此处生成的图片用作 Google Play 应用商品详情中的 1024x500 置顶大图或屏幕截图
+ + + +第 1 步
+将屏幕截图从桌面拖动到右侧的设备上生成效果图。
+Google Play 提供多种链接格式,可让你按自己需要的方式将用户从 Android 应用、网页、广告、评论、文章、社交媒体帖子等链接到你的商品。
+ +这些链接格式可让你:
+ + +如果你从 Android 应用上提供链接,还可以控制此链接是启动 Play 商店应用还是启动浏览器,后者会将用户转至 Google Play 网站。
+ +链接到商品详情页
+ +如果提供下面这种格式的深层链接,你可以将用户直接指向特定应用的商品详情页。在商品详情页上,用户可以查看应用的说明、屏幕截图以及评论等,还可以安装该应用。
+ +要创建此链接,你需要提供完全符合要求的“程序包名称”(可在相应应用的AndroidManifest.xml中找到)。此外,程序包名称还会显示在开发者控制台中。
+ +-
+
- 从网站上: +
-
+
http://play.google.com/store/apps/details?id=<package_name>
+
+ - 从 Android 应用上: +
-
+
market://details?id=<package_name>
+
+
示例如下:
+ +http://play.google.com/store/apps/details?id=com.google.android.apps.maps
要详细了解如何在 Android 应用中发送链接,请参阅从 Android 应用提供链接。
+ + + +链接到商品列表
+ +如果提供下面这种格式的链接,你可以将用户指向你所发布应用的列表。通过商品列表,用户可以查看特定发布者提供的所有应用,以及各个应用的评分、编辑徽章和“安装”按钮。
+ +要创建此链接,你需要提供“发布者名称”(可在开发者控制台中找到)。
+ +-
+
- 从网站上: +
-
+
http://play.google.com/store/search?q=pub:<publisher_name>
+
+ - 从 Android 应用上: +
-
+
market://search?q=pub:<publisher_name>
+
+
示例如下:
+ +http://play.google.com/store/search?q=pub:Google Inc.
要详细了解如何在 Android 应用中发送链接,请参阅从 Android 应用提供链接。
+ + +链接到搜索结果
+ +如果提供下面这种格式的链接,你可以将用户指向 Google Play 上的搜索查询结果页。搜索结果页会显示与此次查询相匹配的应用的列表(可能还会显示其他内容),以及各个应用的评分、徽章和“安装”按钮。
+ +要创建此链接,你只需提供一个搜索查询字符串。如果你希望此次查询搜索 Google Play 应用商品详情以外的地方,则可以去掉该链接网址中的 &c=apps 部分。
-
+
- 从网站上: +
-
+
http://play.google.com/store/search?q=<search_query>&c=apps
+
+ - 从 Android 应用上: +
-
+
market://search?q=<seach_query>&c=apps
+
+
示例如下:
+ +http://play.google.com/store/search?q=maps&c=apps
要详细了解如何在 Android 应用中发送链接,请参阅从 Android 应用提供链接。
+ + + +链接到某个合集
+ +如果你的应用获得推荐或显示在某个 Google Play 排行榜或合集中,你可以提供下面这种格式的链接,将用户直接指向相应合集。该合集会按照一定顺序排列显示其中的应用,并会显示各个应用的评分、简短说明和“安装”按钮。
+ +-
+
- 从网站上: +
-
+
http://play.google.com/store/apps/collection/<collection_name>
+
+ - 从 Android 应用上: +
-
+
market://apps/collection/<collection_name>
+
+
示例如下:
+ +http://play.google.com/store/apps/collection/editors_choice
要详细了解如何在 Android 应用中发送链接,请参阅从 Android 应用提供链接。
+ +表 1: Google Play 上的合集
+ +| 合集 | collection_name | +
|---|---|
| 店员推荐(精选) | featured |
| 编辑精选 | editors_choice |
| 热门付费 | topselling_paid |
| 热门免费 | topselling_free |
| 热门免费新品 | topselling_new_free |
| 热门付费新品 | topselling_new_paid |
| 创收最高 | topgrossing |
| 上升最快 | movers_shakers |
| 最畅销游戏 | topselling_paid_game |
从 Android 应用提供链接
+ +用户在 Android 设备上可以访问两种常规格式的链接。这两种格式在设备上触发的行为略有不同:
+ +-
+
market://启动 Play 商店应用以加载目标网页。
+ http://让用户选择是启用 Play 商店应用还是浏览器来处理请求。如果选择浏览器处理请求,它会在 Google Play 网站上加载目标网页。
+
一般情况下,你应对网页上的链接使用 http:// 格式;对 Android 应用中的链接使用 market://。
如果你希望用户从 Android 应用链接到你的商品,请创建一个可打开 Google Play 网址的 Intent,如下例所示。
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse("market://details?id=com.example.android"));
+ startActivity(intent);
+
+
+
+ 网址格式总结
+ +下表总结了 Google Play 当前支持的 URI(在网页上和在 Android 应用中),如前几部分所述。
+ +| 结果 | +网页链接 | +Android 应用链接 | +
|---|---|---|
| 显示特定应用的商品详情页 | +http://play.google.com/store/apps/details?id=<package_name>
+ | market://details?id=<package_name> |
+
| 显示特定发布者的应用 | +http://play.google.com/store/search?q=pub:<publisher_name> |
+ market://search?q=pub:<publisher_name> |
+
| 使用常规字符串查询搜索应用 | +http://play.google.com/store/search?q=<query> |
+ market://search?q=<query> |
+
主题
+ + +-
+
- 非消耗型和消耗型应用内商品
- +
- 管理消耗型商品购买流程
- +
参考
+-
+
- 应用内结算参考 (V3) +
另请参见
+-
+
- 销售应用内商品 +
借助应用内结算 API 第 3 版,您可以更轻松地将应用内结算功能集成到自己的应用中。此版本包括下列功能:经过改进的同步购买流程、可让您轻松跟踪消耗型商品所有权的 API 以及在本地缓存应用内购买数据。
+ +商品类型
+您可以使用 Google Play 开发者控制台来定义您的商品,包括商品类型、SKU、价格和说明等等。有关详情,请参阅管理应用内结算。API 第 3 版支持两种商品类型,即托管的应用内商品和订阅。
+托管的应用内商品
+托管的应用内商品是指由 Google Play 跟踪和管理其所有权信息的商品。当用户购买托管的应用内商品时,Google Play 会针对每位用户分别存储各商品的购买信息。这使得您日后可随时向 Google Play 进行查询,恢复特定用户购买的商品的状态。这类信息会永久保存在 Google Play 服务器上,即使用户卸载应用或更换设备也是如此。
+如果您使用的是 API 第 3 版,还可以在应用内消耗托管的商品。通常情况下,您可以对那些可供多次购买的商品(例如游戏中使用的货币、燃料或魔法药)实施消耗。托管的商品在被购买后,必须先向 Google Play 发送消耗请求进行消耗,然后才能供用户再次购买。要详细了解应用内商品的消耗,请参阅消耗商品
+ +订阅
+订阅是应用内结算中提供的一种商品类型,可让您通过按月或按年结算的方式在应用内向用户销售内容、服务或功能。您可以在各类应用或游戏中销售对几乎所有类型的数字内容的订阅。要了解订阅的工作原理,请参阅应用内结算订阅。
+使用 API 第 3 版,您可以使用与应用内商品相同的购买流程来购买订阅和检索订阅购买信息。有关代码示例,请参阅实施订阅。
+重要提示:与应用内商品不同,订阅无法消耗。
+ +购买商品
+ +
+ + 图 1. 购买请求的基本顺序。 +
+API 第 3 版中的典型购买流程如下所示: +
-
+
- 您的应用向 Google Play 发送
isBillingSupported请求,以确定您当前使用的应用内结算 API 目标版本是否受支持。
+ - 当您的应用启动或用户登录时,最好向 Google Play 进行查询,确定该用户拥有哪些商品。要查询用户的应用内购买,请发送
getPurchases请求。如果该请求成功,Google Play 会返回一个Bundle,其中包含所购商品的商品 ID 列表、各项购买详情的列表以及购买签名的列表。
+ - 通常情况下,您需要通知用户商品是否可供购买。要查询您在 Google Play 中定义的应用内商品的详细信息,应用可以发送
getSkuDetails请求。您必须在该查询请求中指定商品 ID 列表。如果该请求成功,Google Play 会返回一个包含产品详情(包括商品的价格、标题、说明和购买类型)的Bundle。 +
+ - 如果该用户还未拥有应用内商品,您可以提示购买。为了发起购买请求,您的应用会发送
getBuyIntent请求,指定要购买商品的商品 ID 以及其他参数。当您在开发者控制台中创建新的应用内商品时,应记录其商品 ID。 +-
+
- Google Play 返回的
Bundle中包含PendingIntent,您的应用可用它来启动购买结帐界面。
+ - 您的应用通过调用
startIntentSenderForResult方法来启动 PendingIntent。
+ - 当结帐流程结束后(即用户成功购买商品或取消购买),Google Play 会向您的
onActivityResult方法发送响应Intent。onActivityResult的结果代码中有一个代码将用于表明用户是完成了购买还是取消了购买。响应Intent中会包含所购商品的相关信息,其中包括 Google Play 为了唯一标识此次购买交易而生成的purchaseToken字符串。Intent中还包含使用您的私人开发者密钥签署的购买签名。
+
+ - Google Play 返回的
要详细了解 API 第 3 版的调用和服务器响应,请参阅应用内结算参考。
+ +消耗应用内商品
+您可以使用消耗机制来跟踪用户对应用内商品的所有权。
+在第 3 版中,所有应用内商品都是托管的。也就是说,用户对所购应用内商品的所有权由 Google Play 进行维护,您的应用可以在需要时查询用户的购买信息。当用户成功购买应用内商品后,该次购买就会记录在 Google Play 中。应用内商品一经售出,就会被视为“被拥有”。处于“被拥有”状态的应用内商品无法再通过 Google Play 购买。您必须对“被拥有”的应用内商品发送消耗请求,然后 Google Play 才能再次将其设成可购买状态。消耗应用内商品会将商品切换回“未被拥有”状态并删除之前的购买数据。
+
+ + 图 2. 消耗请求的基本顺序。 +
+为了检索用户所拥有商品的列表,您的应用会向 Google Play 发送 getPurchases 调用。您的应用可以通过发送 consumePurchase 调用提出消耗请求。在请求参数中,您必须指定应用内商品独一无二的 purchaseToken 字符串,此字符串是在商品售出时由 Google Play 指定的。Google Play 会返回一个状态代码,指明此次消耗是否已成功记录。
非消耗型和消耗型应用内商品
+您需要决定您的应用内商品是非消耗型商品还是消耗型商品。
+-
+
- 非消耗型商品 +
- 通常情况下,对于在应用内购买一次就能永久使用的应用内商品,您无需实施消耗。这些商品在购买后将永久与用户的 Google 帐户相关联。高级版升级和关卡包就属于非消耗型应用内商品。 +
- 消耗型商品 +
- 相反,对于可多次购买的商品,您可以实施消耗。通常情况下,这类商品提供某些临时效果。例如,用户在游戏中的角色可以从自己的存货中获得生命值或额外的金币。在您的应用中分配所购商品的收益或效果称之为“配置”应用内商品。您负责控制和跟踪如何向用户配置应用内商品。
+
重要提示:您必须先向 Google Play 发送消耗请求,在收到表明此次消耗已成功记录的响应之后,您才能在应用中配置消耗型应用内商品。
+
+
在应用中管理消耗型商品购买
+下面是购买消耗型应用内商品的基本流程:
+-
+
- 调用
getBuyIntent启动购买流程。
+ - 从 Google Play 接收指示购买是否成功完成的响应
Bundle。
+ - 如果购买成功,通过调用
consumePurchase消耗此次购买。
+ - 从 Google Play 接收指示消耗是否成功完成的响应代码。 +
- 如果消耗成功,在应用中配置商品。 +
之后,当用户启动或登录到您的应用时,您应检查该用户是否拥有任何尚未消耗的消耗型应用内商品。如果有,请务必消耗并配置这些商品。如果您在应用中实施消耗型应用内商品,则可以采用以下推荐的应用启动流程:
+-
+
- 发送
getPurchases请求,查询该用户拥有的应用内商品。
+ - 如果有消耗型应用内商品,通过调用
consumePurchase消耗这些商品。必须执行这步操作,因为应用虽可能已完成该消耗型商品的购买订单,但在其发送消耗请求之前仍有可能停止运行或断开连接。
+ - 从 Google Play 接收指示消耗是否成功完成的响应代码。 +
- 如果消耗成功,在应用中配置商品。 +
本地缓存
+目前,由于 Google Play 客户端在设备上本地缓存应用内结算信息,因此您可以使用 API 第 3 版更频繁地查询此类信息,例如通过调用 getPurchases 进行查询。与旧版本的 API 不同,API 第 3 版的很多调用都是在缓存中进行查找,而不用通过网络连接到 Google Play,这样就显著加快了 API 的响应速度。
如果您使用应用内结算,您就无需处理任何财务交易。不过,您仍需执行一些管理任务,包括在 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),提供所售商品的详细信息,然后点击保存或发布。 +
+ + 图 2. 通过“添加新商品”页面,您可以向应用的商品列表添加商品。 +
+对于商品列表中的每件商品,您都必须输入以下信息:
+-
+
- 应用内商品 ID
+
每件商品的 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" +
+ +相关说明和使用详情如下所示。
+ +-
+
- product_id
+
等同于应用内商品界面中的“应用内商品 ID”设置。如果您指定的“product_id”在商品列表中已经存在,且您选择在导入 CSV 文件时覆盖商品列表,则 CSV 文件中指定的值就会覆盖现有商品的数据。覆盖功能不会删除商品列表中已列出但不包含在 CSV 文件中的商品。
+
+ - publish_state
+
等同于应用内商品界面中的“发布状态”设置。值可以是
+published或unpublished。
+ - purchase_type
+
等同于应用内商品界面中的“商品类型”设置。值可以是
+managed_by_android(等同于应用内商品界面中的按用户帐户管理的商品)或managed_by_publisher(等同于应用内商品界面中的不受管理的商品)。
+ - autotranslate
+
等同于选中应用内商品界面中的使用自动翻译填充字段复选框。值可以是
+true或false。
+ - locale
+
等同于应用内商品界面中的“语言”设置。您必须有一个默认语言区域项。默认语言区域必须是语言区域列表中的第一项,且必须包含“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
+
等同于应用内商品界面中的“标题”设置。如果“title”包含分号,必须使用反斜杠进行转义(例如“\;”)。如果标题本身包含反斜杠,也应使用反斜杠进行转义(例如“\\”)。
+
+ - description
+
等同于应用内商品界面中的“说明”。如果“description”包含分号,则必须使用反斜杠进行转义(例如“\;”)。如果说明本身包含反斜杠,也应使用反斜杠进行转义(例如“\\”)。
+
+ - autofill
+
等同于点击应用内商品界面中的自动填充。值可以是
+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; ..."
+
+ - country
+
您为其指定价格的国家/地区。您只能列出您的应用所定位的国家/地区。国家/地区代码是按照 ISO 3166-2 的定义,由两个大写字母组成的 ISO 国家/地区代码(例如“US”)。
+
+ - price
+
等同于应用内商品界面中的“价格”。此价格必须使用微单位指定。要将货币值换算成微单位,请用实际值乘以 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 文件。
+
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 开发者控制台为每个应用都提供一个公用的许可密钥。要获取应用的密钥,请按以下步骤操作:
+-
+
- 打开所有应用面板。 +
- 点击相应的应用名称,然后选择服务和 API。 +
- 向下滚动到此应用的许可密钥字段,找到应用的密钥,如下图所示。 +
过去,开发者控制台为每个开发者帐户都提供一个公钥。为了将应用迁移到按应用分配的新公钥,开发者控制台将应用专用密钥设置为之前的开发者密钥。这样做可确保依赖于(之前的)开发者密钥的应用能与新公钥兼容。
+ +
+ + 图 4. 您可以在服务和 API 面板中找到各个应用的许可密钥。 +
+获取相关支持
+ +如果您在实施应用内结算时有疑问或遇到问题,请与下表列出的支持资源联系(参见表 2)。将您的问题发布到正确的论坛上,可以更快获得所需支持。
+ +表 2. 适用于 Google Play 应用内结算的开发者支持资源
+ +| 支持类型 | +资源 | +主题范围 | +
|---|---|---|
| 开发与测试问题 | +Google 网上论坛:android-developers | +应用内结算集成问题、有关用户体验的提示、对响应的处理、混淆代码、进程间通信 (IPC)、测试环境设置。 | +
| 堆栈溢出:http://stackoverflow.com/questions/tagged/ + android | +||
| 结算问题跟踪器 | +结算项目问题跟踪器 | +与应用内结算示例代码直接相关的错误和问题报告。 | +
要了解如何向上述所列论坛发帖的一般信息,请参阅“资源”标签中的开发者论坛一文。
+ diff --git a/docs/html-intl/intl/zh-cn/google/play/billing/billing_best_practices.jd b/docs/html-intl/intl/zh-cn/google/play/billing/billing_best_practices.jd new file mode 100644 index 0000000000000..4aff17d46f6f5 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/google/play/billing/billing_best_practices.jd @@ -0,0 +1,81 @@ +page.title=安全性和设计 +parent.title=In-app Billing +parent.link=index.html +@jd:body + +在设计应用内结算的实施时,请务必遵循本文中介绍的安全性和设计指南。这些指南是推荐的最佳做法,适用于所有使用 Google Play 应用内结算服务的开发者。
+ +安全性方面的最佳做法
+ +在服务器上执行签名验证任务
+如果可能的话,你应该在远程服务器上(而不是设备上)执行签名验证。在服务器上实施验证过程,可有效防止攻击者通过对 .apk 文件进行反向工程来破坏验证过程。如果你将安全性流程放置到远程服务器上,请确保设备服务器的握手过程是安全的。
+ +保护你的未锁定内容
+为防止恶意用户重新分发你未锁定的内容,请不要将这种内容放入你的 .apk 文件中,而是执行以下操作之一:
+-
+
- 使用实时服务发送内容,例如内容 Feed。通过实时服务发送内容可保持内容始终是最新的。 +
- 使用远程服务器发送内容。 +
当你通过远程服务器或实时服务发送内容时,你可以将未锁定内容存储在设备内存中或设备的 SD 卡上。如果你将内容存储在 SD 卡上,请务必将内容加密并使用设备专有的密钥。
+ +混淆你的代码
+你应混淆应用内结算代码,让攻击者难以对你的安全协议和其他应用组件进行反向工程。我们建议你至少对代码运行 Proguard 等代码混淆工具。
+除了运行代码混淆程序以外,我们还建议你使用以下技术混淆你的应用内结算代码。
+-
+
- 将方法内嵌入其他方法中。 +
- 创建动态字符串,而不是将其定义为常量。 +
- 使用 Java 反射来调用方法。 +
使用这些技术有助于缩小你应用的受攻击范围,并最大程度帮助你抵御会对应用内结算实施造成损害的攻击。
+注意:如果你使用 Proguard 来对代码进行混淆处理,则必须将以下内容行添加到 Proguard 配置文件中:
+-keep class com.android.vending.billing.**
修改所有示例应用代码
+应用内结算示例是可供任何人下载的公开发布应用。这意味着如果你直接使用发布的示例代码,则对攻击者而言比较容易对你的应用进行反向工程。请紧记示例应用只能作为示例使用。如果你使用示例应用中的任何一部分,则必须在发布之前或将其作为生产应用的一部分前对其进行修改。
+尤其要注意的是,攻击者会寻找应用内已知的进入点和离开点,因此请务必修改与示例应用完全相同的代码部分。
+ +使用安全随机数
+随机数必须是不可预测的,也不能重复使用。在生成随机数时,请务必使用采用加密保护的随机数字生成器(例如 SecureRandom),这样可以减少重放攻击。
此外,如果你在服务器上执行随机数验证,请务必在服务器上生成随机数。
+ +在提交购买请求时设置开发者有效内容字符串
+使用应用内结算 API 第 3 版,你可以在向 Google Play 发送购买请求时包括一个“开发者有效内容”字符串令牌。通常情况下,这样做是为了提交可唯一标识此购买请求的字符串令牌。如果你指定字符串值,那么 Google Play 会返回购买响应以及该字符串。随后,在你针对此购买进行查询时,Google Play 会返回此字符串以及购买详情。
+提交字符串令牌可以帮助应用识别进行了购买的用户,以便你稍后验证该用户进行的购买是否合法。对于消耗型商品,你可以使用随机生成的字符串;但是对于非消耗型商品,则应该使用可唯一标识用户的字符串。
+当你获得 Google Play 的响应时,请确保开发者有效内容字符串匹配你之前与购买请求一起发送的令牌。作为进一步的安全预防措施,你应该在自己的安全服务器上执行验证。
+ + +针对商标和版权侵权采取行动
+如果你看到自己的内容在 Google Play 上被重新分发,请立即、果断地采取行动。发出商标侵权通知或版权侵权通知。
+ +针对未锁定内容实施可撤消方案
+如果你使用远程服务器发送或管理内容,请确保当用户访问内容时,应用能够验证未锁定内容的购买状态。这样你可以根据需要撤消使用,并最大限度地减少盗版。
+ +保护你的 Google Play 公钥
+为保护你的公钥安全并防止被恶意用户和黑客攻击,请不要将其作为文字字符串嵌入任何代码中。而是在运行时以拼凑方式构建字符串或者使用位操作处理(例如,XOR 搭配其他字符串)以隐藏真实密钥。公钥本身不是秘密信息,但是你一定不希望黑客或恶意用户能轻易将公钥替换为其他钥匙。
+ diff --git a/docs/html-intl/intl/zh-cn/google/play/billing/billing_overview.jd b/docs/html-intl/intl/zh-cn/google/play/billing/billing_overview.jd new file mode 100644 index 0000000000000..aceadcb373a79 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/google/play/billing/billing_overview.jd @@ -0,0 +1,93 @@ +page.title=应用内结算概述 +parent.title=In-app Billing +parent.link=index.html +@jd:body + +概述
+-
+
- 使用应用内结算销售数字商品,包括一次性商品和定期订阅。 +
- 在 Google Play 上发布的所有应用均可使用该服务。您只需有 Google Play 开发者控制台帐户和 Google 电子钱包商家帐户即可。 +
- 结帐流程由 Google Play 自动处理,其界面与应用购买流程的界面相同。 +
本文内容
+-
+
- 应用内结算 API +
- 应用内商品
+
-
+
- 商品类型 +
+ - Google Play 开发者控制台 +
- Google Play 购买流程 +
- 示例应用 +
- 迁移注意事项 +
相关示例
+-
+
- 示例应用(第 3 版) +
本文将介绍您需了解的应用内结算基本组件和功能,以便您将应用内结算功能添加到应用中。
+ +注意:请务必遵守目标国家/地区(您要在这些国家/地区分发应用)的适用法律。例如,在欧盟国家,不公平商业行为指令的相关法律禁止直接规劝儿童购买广告产品或者劝说其父母或其他成年人为儿童购买广告产品。请参阅欧盟消费者保护机构的立场,详细了解此主题及其他主题。 +
+ +应用内结算 API
+您的应用会通过相应 API (由设备上安装的 Google Play 应用提供)来访问应用内结算服务。然后,Google Play 应用会在您的应用和 Google Play 服务器之间传送结算请求和响应。实际上,您的应用从不直接与 Google Play 服务器通信,而是通过进程间通信 (IPC) 向 Google Play 应用发送结算请求并接收 Google Play 应用发来的响应。此外,您的应用也不管理其与 Google Play 服务器之间的任何网络连接。
+应用内结算只能在您通过 Google Play 发布的应用中实施。要完成应用内购买请求,Google Play 应用必须能够通过网络访问 Google Play 服务器。
+ +应用内结算第 3 版是最新版本,依然具有非常广泛的兼容性,可用于各种 Android 设备。运行 Android 2.2 或更高版本且安装了最新版本的 Google Play 商店的设备(绝大多数有效设备)都支持使用应用内结算第 3 版。
+ +第 3 版的功能
+-
+
- 通过简化的 API 发送请求。此 API 可让您轻松地向 Google Play 请求商品详情、订购应用内商品以及根据用户对商品的所有权快速恢复商品 +
- 订单信息会在购买完成时同步传送到设备上 +
- 所有购买都是“托管的”(也就是说,Google Play 负责记录用户对应用内商品的所有权)。对于同一件应用内商品,用户无论何时都只能拥有该商品的一个副本而不能拥有多个副本 +
- 您可以消耗所购商品。当消耗后,该商品将切换回“未被拥有”状态,且可被用户从 Google Play 中再次购买 +
- 支持订阅 +
要详细了解应用内结算的其他版本,请参阅版本说明。
+ +应用内商品
+应用内商品是您在应用内向用户出售的数字商品,包括游戏代币、旨在改善用户体验的应用功能升级以及应用中的新增内容。
+应用内结算只能用于销售数字内容,而不能用于销售实体商品、个人服务或任何需要进行实物交付的商品/服务。与明码标价的应用不同,一旦用户购买了应用内商品,系统便不会提供退款窗口。
+Google Play 不提供任何形式的内容交付,您需要自行交付在应用内销售的数字内容。应用内商品始终与一个且仅与一个应用明确关联。也就是说,在一个应用中不能购买为另一个应用发布的应用内商品,即使这两个应用来自相同的开发者也是如此。
+ +商品类型
+应用内结算支持多种商品类型,因此您可灵活选择如何通过您的应用获利。无论是哪种商品,您均能通过 Google Play 开发者控制台进行定义。
+您可以为应用内结算应用指定以下两类商品:“托管的应用内商品”和“订阅”。Google Play 会按用户帐户来处理和跟踪您应用中的应用内商品和订阅的所有权。详细了解应用内结算第 3 版支持的商品类型。
+ +Google Play 开发者控制台
+在开发者控制台上,您不仅能发布应用内结算应用,还能管理您应用中出售的各种应用内商品。
+对于与您的应用相关联的数字商品(包括一次性商品和定期订阅),您可以为其创建商品列表。对于每件商品,您都可以定义下列信息:唯一商品 ID(也称为 SKU)、商品类型、定价、说明以及 Google Play 应如何处理和用户对该商品的购买。
+您还可以创建测试帐户,授权这些帐户测试尚未发布的应用。
+要了解如何使用开发者控制台配置您的应用内商品和商品列表,请参阅管理应用内结算。
+ +Google Play 购买流程
+Google Play 使用的结帐后端服务与用于应用购买的服务相同,因此您的用户将获得一致且熟悉的购买流程使用体验。
+重要提示:您必须有 Google 电子钱包商家帐户才能在 Google Play 上使用应用内结算服务。
+购买开始时,您的应用需要针对相应的应用内商品发送结算请求。然后,Google Play 会处理此次交易的所有结帐详情,包括请求和验证付款方式以及处理财务交易。
+当结帐流程完成后,Google Play 会向您的应用发送购买详情,例如订单号、订单日期和时间以及所付价格。您的应用从不需要处理任何财务交易,这些事宜完全 Google Play 负责。
+ +示例应用
+为了帮您将应用内结算集成到您的应用中,Android SDK 提供了一个示例应用,向您演示如何在应用内销售应用内商品和订阅。
+ +API 第 3 版的 TrivialDrive 示例演示了如何使用应用内结算 API 第 3 版在赛车游戏中实施应用内商品和订阅购买。该应用不仅演示了如何发送应用内结算请求以及处理来自 Google Play 的同步响应,还演示了如何通过此 API 记录商品的消耗情况。第 3 版示例包括多种工具类,非常便于处理应用内结算操作和执行自动签名验证。
+ +建议:请务必在发布应用前混淆其中的代码。有关详情,请参阅安全性和设计。
+ +迁移注意事项
+应用内结算 API 第 2 版已弃用,将于 2015 年 1 月关闭。如果您现有的应用内结算实施使用的是 API 第 2 版或更低版本,则您必须迁移到应用内结算第 3 版。
+ +如果您在发布的应用中销售应用内商品,请注意以下事项:
+-
+
- 您之前在开发者控制台中定义的托管商品和订阅仍能使用第 3 版。 +
- 对于您已经为现有应用定义的非托管商品,如果您使用 API 第 3 版针对这些商品提出购买请求,这些商品将被视为托管商品。您无需在开发者控制台中为这些商品创建新的商品条目,且能使用相同的商品 ID 来购买这些商品。如果您使用 API 第 2 版或更低版本提出购买请求,这些商品仍会被视为非托管商品。 +
Google Play 开发者控制台提供了一些帮助你测试应用内结算实施情况的工具:
+ +-
+
- 测试购买,让拥有测试帐户的用户真正购买你发布的应用内商品,但不向这些用户帐户实际收取费用。 +
- 来自 Google Play 的静态结算回复,用于在开发初期进行测试 +
要测试应用的应用内结算,必须将该应用安装在 Android 设备上。你不能使用 Android 模拟器测试应用内结算。用于测试的设备必须运行标准的 Android 1.6 或更高版本的平台(API 级别 4 或更高级别),并且要安装最新版本的 Google Play 应用。如果设备运行的不是最新的 Google Play 应用,你的应用将不能向 Google Play 发送应用内结算请求。有关如何设置设备以便用于开发 Android 应用的一般信息,请参阅使用硬件设备。
+ +测试应用内购买
+ +应用内结算实施就绪后,你可以通过两种方法测试应用内 SKU 的购买:
+ +-
+
- 测试购买:让你选择的许可测试用户在应用发布之前购买应用内商品,但不向这些用户收取费用; +
- 真正购买:让普通用户真正购买你的应用内商品,并根据用户的付款方式实际收取费用。在这种情况下,你可以利用 Google Play 的 Alpha 和 Beta 测试用户小组管理哪些用户可以使用你的实施进行真正的购买。 +
下面的各个部分介绍了有关如何使用这些方法进行测试和验证的详情。
+ +测试购买(应用内结算沙盒)
+ +测试购买提供了一种安全、方便的方法,让你在开发过程中或准备发布期间,对你的应用内结算实施情况进行大规模的测试。测试期间,经过授权的用户帐户可在你的应用尚未发布时通过 Google Play 购买应用内商品,不过这些用户帐户不用实际支付费用。
+ +获得测试访问权限之后,这些用户可以侧载你的应用,并测试商品的完整销售、购买和订单完成流程。测试购买会产生真实的订单,Google Play 会采用与处理其他订单相同的方式对其进行处理。购买完成后,Google Play 不会让这些订单进入财务流程,从而确保不会向用户帐户实际收取费用,并在 14 天后自动取消已完成的订单。
+ +设置测试购买
+ +设置测试购买很简单,你可以选择任何用户帐户作为测试帐户,而测试帐户中的任何用户都可以通过可用的付款方式进行测试购买(当然用户不需要通过付款方式支付任何费用)。
+ +首先,上传并发布你希望测试者能够购买的应用内商品。你可以在开发者控制台中上传和发布应用内商品。请注意,你可以在发布 APK 之前上传并发布应用内商品。
+ +然后,为获得授权的用户创建许可测试帐户。在开发者控制台中,转到设置 > 帐户详情,然后在“许可测试”部分将相应地址添加到可用于测试的 Gmail 帐户字段。有关详情,请参阅设置测试购买。
+ +在你将用户添加为许可测试帐户并保存更改之后,这些用户在 15 分钟内即可开始购买你的应用内商品。随后你可以向测试者发布你的应用并提供收集反馈的方法。
+ +注意:要进行测试购买,许可测试帐户必须设置在用户的 Android 设备上。如果设备上有多个帐户,则必须使用下载应用时所用的帐户进行购买。如果没有帐户下载过应用,则使用第一个帐户进行购买。用户可以通过展开购买对话框来确认执行购买的帐户。
+ +测试购买和开发者帐户
+经过授权的许可测试帐户在 Google Play 中与你的开发者帐户相关联,而不是与特定 APK 或程序包名称相关联。被标识为测试帐户的帐户可以购买你帐户的任何应用内商品而不用支付费用。
+ +购买流程的详情
+在测试购买期间,用户可以测试应用中实际的销售、购买和订单完成流程。购买时,应用内商品与普通商品一样显示,并包含实际价格。不过,Google Play 会在购买对话框中心处显示通知,说明这是测试购买,以便辨识。 +
+ +取消已完成的测试购买
+Google Play 会累积每个用户已完成的测试购买,但不会将相关信息传递到财务流程。经过一段时间后,Google Play 会自动取消这些购买以进行清理。
+ +在某些情况下,你可能希望手动取消测试购买以便继续进行测试。要取消购买,你可以:
+ +-
+
- 等待交易到期:Google Play 会在购买日期的 14 天后清除已完成的测试购买。 +
- 手动取消购买:你可以转到 Google 电子钱包 Merchant Center,找到相应交易,将其取消。通过查找订单编号即可找到交易。 +
使用测试购买的要求
+如果你打算使用测试购买,请注意以下要求和限制:
+-
+
- 只有许可测试帐户可以进行测试购买,而且应用要使用应用内结算 API 第 3 版。 +
- 只有应用内商品可以进行测试购买,应用内订阅则不可以。 +
使用真实交易进行测试
+在准备发布使用应用内结算的应用时,你可以先利用 Google Play Alpha/Beta 发布选项进行来验证和负荷测试你的应用内结算实施情况,然后再向所有用户发布应用。
+ +Alpha/Beta 测试小组内的真实用户(由你选择)可以通过 Google Play 安装你的应用并测试应用内商品。他们可以通过其在 Google Play 中的常规付款方式进行真正的购买,而他们的帐户中会产生实际费用。请注意,如果你的 Alpha 和 Beta 发布小组中包括测试许可帐户,这些用户将只能进行测试购买。
+ + +使用静态回复进行测试
+ +我们建议你先使用来自 Google Play 的静态回复测试应用内结算的实施情况。这样一来,你可以确认应用能否正确处理主要 Google Play 回复,以及你的应用能否正确验证签名。即使应用尚未发布,你也可以执行此测试。
+ +要使用静态回复测试你的实施,请使用具有预留的商品 ID 的特定商品发送应用内结算请求。每个预留的商品 ID 均会从 Google Play 返回特定的静态回复。当你使用预留的商品 ID 发送应用内结算请求时不会发生资金转移。此外,当你使用预留的商品 ID 发送结算请求时不能指定付款方式。图 1 显示了商品 ID 为“android.test.purchased”的预留商品的结帐流程。
+ +
+ + 图 1. 特定的预留商品“android.test.purchased”的电子钱包流程 +
+ +你不需要在应用的商品列表中列出预留的商品。Google Play 已经知道预留的商品 ID。此外,你不需要将应用上传到开发者控制台,就可以使用预留的商品 ID 执行静态回复测试。你只需在设备上安装你的应用,登录到设备,然后使用预留的商品 ID 发送结算请求。
+ +注意:过去,你可以通过上传未发布的“草稿”版本来测试应用,但现在系统已不再支持此功能。不过,现在你可以在将应用上传到 Google Play 商店之前就使用静态回复测试应用。有关详情,请参阅草稿应用不再受支持。 + +
用于测试静态应用内结算回复的预留商品 ID 有四种:
+ +-
+
- android.test.purchased
+
当你使用此商品 ID 发送应用内结算请求时,Google Play 会假定你成功购买了商品而做出回复。回复内容包括一个 JSON 字符串,其中包含虚拟的购买信息(例如虚拟的订单 ID)。在某些情况下,JSON 字符串是经过签名的,并且回复中也包括签名,因此你可以利用这些回复测试你的签名验证实施情况。
+
+ - android.test.canceled
+
当你使用此商品 ID 发送应用内结算请求时,Google Play 会假定购买已被取消而做出回复。如果订购流程出现问题(例如信用卡无效,或你在用户付款之前取消了订单),就会发生这种情况。
+
+ - android.test.refunded
+
当你使用此商品 ID 发送应用内结算请求时,Google Play 会假定购买已退款而做出回复。退款不能通过 Google Play 的应用内结算服务发起,而是必须由你(商家)发起。在你通过 Google 电子钱包商家帐户处理退款请求之后,Google Play 会向你的应用发送一条退款信息。只有当 Google Play 收到来自 Google 电子钱包的退款已执行的通知时,Google Play 才会发送此消息。有关退款的更多详情,请参阅处理 IN_APP_NOTIFY 信息和应用内结算定价。
+
+ - android.test.item_unavailable
+
当你使用此商品 ID 发送应用内结算请求时,Google Play 会假定所购商品在你应用的商品列表中不存在而做出回复。
+
+
在某些情况下,预留的商品可能会返回经过签名的静态回复,这样你可以测试应用中的签名验证。只有当运行应用的用户拥有开发者帐户或测试帐户时,预留的商品才返回经过签名的回复。 + +
要使用预留的商品 ID 发送应用内结算请求,你只需构建一个常规的 REQUEST_PURCHASE 请求即可,不过请使用上文介绍的一个预留商品 ID,而不要使用你的应用商品列表中的真实商品 ID。
要使用预留的商品 ID 测试应用,请按以下步骤操作:
+ +-
+
- 在 Android 设备上安装你的应用。
+
你不能使用模拟器测试应用内结算,而是必须在设备上安装应用才能测试应用内结算。
+要了解如何在设备上安装应用,请参阅在设备上运行。
+
+ - 使用你的开发者帐户登录到设备。
+
如果你只是使用预留的商品 ID 进行测试,则不需要使用测试帐户。
+
+ - 确保你的设备运行的是受支持的 Google Play 应用版本或 MyApps 应用版本。
+
如果你的设备运行的是 Android 3.0,则应用内结算要求使用版本为 5.0.12(或更高版本)的 MyApps 应用。如果你的设备运行的是其他版本的 Android,则应用内结算要求使用版本为 2.3.4(或更高版本)的 Google Play 应用。要了解如何查看 Google Play 应用的版本,请参阅更新 Google Play。
+
+ - 运行应用并购买预留的商品 ID。 +
注意:使用预留的商品 ID 发送应用内结算请求会覆盖常用的 Google Play 生产系统。当你针对某个预留的商品 ID 发送应用内结算请求时,服务的质量会比不上生产环境。
+ +设置测试真实购买
+ +完成静态回复测试,并确认应用中的签名验证正常工作之后,你就可以通过执行实际的应用内购买,来测试应用内结算的实施情况。测试真实的应用内购买能让你测试端到端的应用内结算体验,包括从 Google Play 进行实际购买,以及用户在你的应用中体验的实际结帐流程。
+ +注意:你可以将应用发布到 Alpha 发布渠道来进行端到端的测试。也就是说,这样做你可以将应用发布到 Google Play 商店,但限制为仅向你指定的测试者提供该应用。
+ +要通过实际的应用内购买测试你的应用内结算实施情况,请在 Google Play 开发者控制台注册至少一个测试帐户。你不能使用自己的开发者帐户测试完整的应用内购买流程,因为 Google 电子钱包不允许你购买自己的商品。如果你之前没有设置过测试帐户,请参阅设置测试帐户。
+ +此外,测试帐户只能购买你的商品列表中已经发布的商品。虽然你可以不发布应用,但必须发布商品。
+ +要通过实际购买测试你的应用内结算实施情况,请按以下步骤操作:
+ +-
+
- 通过开发者控制台将你的应用上传到 Alpha 发布渠道。
+
+
注意:过去,你可以通过上传未发布的“草稿”版本来测试应用,但现在系统已不再支持此功能。现在你必须将应用发布到 Alpha 或 Beta 发布渠道,才能进行测试。有关详情,请参阅草稿应用不再受支持。 + +
+ - 将商品添加到应用的商品列表。
+
请务必发布商品(应用可以保持未发布状态)。要了解如何操作,请参阅创建商品列表。
+
+ - 在 Android 设备上安装你的应用。
+
你不能使用模拟器测试应用内结算,而是必须在设备上安装应用才能测试应用内结算。
+要了解如何在设备上安装应用,请参阅在设备上运行。
+
+ - 确保你的设备运行的是受支持的 Google Play 应用版本或 MyApps 应用版本。
+
如果你的设备运行的是 Android 3.0,则应用内结算要求使用版本为 5.0.12(或更高版本)的 MyApps 应用。如果你的设备运行的是其他版本的 Android,则应用内结算要求使用版本为 2.3.4(或更高版本)的 Google Play 应用。要了解如何查看 Google Play 应用的版本,请参阅更新 Google Play。
+
+ - 在应用中进行应用内购买。 +
注意:在设备上更改主要帐户的唯一方法是恢复出厂设置,请确保先使用你的主要帐户在设备上登录。
+ +完成对应用内结算实施情况的测试之后,你就可以在 Google Play 上发布应用了。你可以按照常规步骤准备、登录以及在 Google Play 上发布。 +
+ +草稿应用不再受支持
+ +过去,你可以发布应用的“草稿”版本进行测试,但现在系统已不再支持此功能。现在你可以通过两种方法在 Google Play 商店中测试预览版应用的功能运行情况:
+ +-
+
+
- 你可以将应用发布到 Alpha 或 Beta 发布渠道。这样,应用将进入 Google Play 商店,但只提供给你添加到“白名单”中的测试者。 + +
- 在少数情况下,你可以使用未发布的应用测试 Google Play 的功能。例如,你可以使用静态回复和特殊的预留商品 ID(始终返回特定结果,例如“已购买”或“已退款”)来测试未发布应用的应用内结算支持。 + +
应用内结算是一项 Google Play 服务,可让你在自己的应用内销售数字内容。你可以使用该服务销售很多内容,包括媒体文件或照片等可下载的内容、游戏关卡或药水等虚拟内容、高级服务及功能,等等。你可以使用应用内结算销售下面这两类商品:
+ +应用内结算的新变化
+-
+
- IAB 第 2 版关闭 - 应用内结算 API 第 2 版已弃用,将于 2015 年 1 月关闭。如果你的应用仍在使用应用内结算第 2 版,请尽快迁移到 API 第 3 版。 +
- 季节性订阅 - 你现在可以设置定期的季节性订阅,即订阅在每年的同一天开始并在同一天结束(例如,每年 9 月 1 日开始、次年 4 月 10 日结束的体育订阅)。 +
- 推迟订阅结算 - 你可以将订阅者的下一个结算日推迟到你选择的日期。用户在推迟期内仍能访问相关内容,但不用缴费。 +
- Google Play Developer API - 利用 Google Play Developer API,你可以执行各种发布和应用管理任务。该 API 中包含之前称为“Purchase Status API”的功能。 +
- 撤消订阅/退还订阅费 - 你可以使用 Google Play Developer API 撤消用户的订阅并退还其订阅费。如果你这样做,用户的订阅将立即结束,且系统会退还其最近的订阅付款。 +
- 应用内结算第 3 版 - 最新版本的应用内结算采用更易实施的同步 API,可让你更有效地管理应用内商品和订阅。 +
-
+
- 标准应用内商品(一次性结算);或 +
- 订阅(定期自动结算) +
如果你使用应用内结算服务来销售商品,那么无论你销售的是应用内商品还是订阅,Google Play 都会负责处理所有结帐详情,因此你的应用从不需要直接处理任何财务交易。Google Play 使用的结帐后端服务与用于应用购买的服务相同,因此你的用户将获得一致且熟悉的购买流程使用体验。
+ +你通过 Google Play 发布的所有应用都可以实施应用内结算。只要你有 Google Play 开发者控制台帐户和 Google 电子钱包商家帐户(无需创建任何特殊帐户或进行任何注册),即可实施该服务。
+ +为了帮你将应用内结算集成到你的应用中,Android SDK 提供了一个示例应用,向你演示如何在应用内销售标准的应用内商品和订阅。
+ +要开始使用应用内结算,请先阅读下面介绍的文档或参加销售应用内商品培训课程。
+ +-
+
- 概述 +
- 请阅读本文,了解应用内结算的基本概念。 +
- API 第 3 版 +
- 请阅读这部分中的文档,了解应用内结算最新版本概述以及实施详情和 API 参考。 +
- 安全性和设计 +
- 请参阅这些最佳做法,以帮助确保你的应用内结算实施安全稳妥、设计合理。 +
- 测试应用内结算 +
- 了解应用内结算测试工具的工作原理,以及如何测试应用内结算实施。 +
- 管理应用内结算 +
- 了解如何设置商品列表、注册测试帐户以及处理退款。 +

Android 5.0 Lollipop
+在 Android 5.0 的版本更新中,我们添加了多种可用于你的应用程序的新功能,比如锁屏通知,一个全新的相机API,OpenGL ES 3.1,以及新的 Material Design 界面等等。
+ 了解详情 ++ + + +
+ 现在 Android 系统还支持以下这些备受期待的新设备。 +
你的语言的资源
+我们翻译了以下一些网站资源,希望能帮助你开始设计、开发和发布你的Android应用程序到全球。
+ +检查清单
+ + + +Google Play 应用内结算
+ + + +工具
+ + + +培训
+ + + + +本文内容
+ +-
+
- 启用 ProGuard + +
- 配置 ProGuard + +
-
+ 解码混淆后的堆栈跟踪信息
+
+
-
+
- 调试已发布应用时应注意的事项 +
+
另请参见
+ +-
+
- + ProGuard 手册 » + +
- + ProGuard ReTrace 手册 » + +
ProGuard 工具通过移除无用的代码以及使用语义隐晦的名称来重命名类、字段和方法,从而达到压缩、优化和混淆代码的目的。最终您将获得一个较小的 .apk 文件,此文件更难于进行反向工程。由于 ProGuard 会使应用更难于进行反向工程,因此当应用使用对安全性要求极高的功能时(例如,当您向应用授予许可时),您必须使用此工具。
ProGuard 已集成到 Android 构建系统,所以您无需手动调用此工具。只有当您在发布模式下构建应用时,ProGuard 才会运行,因此当您在调试模式下构建应用时,就无需处理混淆后的代码。是否运行 ProGuard 完全由您决定,但我们强烈建议您运行该工具。
+ +本文介绍如何启用和配置 ProGuard,以及如何使用 retrace 工具解码混淆后的堆栈跟踪信息。
启用 ProGuard
+ +当您创建 Android 项目时,系统会在该项目的根目录中自动生成一个 proguard.cfg 文件。此文件将定义 ProGuard 会如何优化和混淆代码,因此您必须了解如何根据自己的需求对其进行自定义。默认的配置文件只涵盖一般的使用情形,因此您极有可能需要根据自己的需求对其进行修改。请参阅下文配置 ProGuard 这一部分,了解如何自定义 ProGuard 配置文件。
要启用 ProGuard,让其作为 Ant 或 Eclipse 构建环境的一部分运行,请在 <project_root>/project.properties 文件中设置 proguard.config 属性。该路径可以是绝对路径,也可以是项目根目录的相对路径。
注意:在使用 Android Studio 时,您必须将 Proguard 添加到 gradle.build 文件的构建类型中。有关详情,请参阅 Gradle 插件用户指南。
+
+
如果您将 proguard.cfg 文件留在默认位置(项目的根目录中),则可以按如下格式指定其位置:
+ proguard.config=proguard.cfg ++
+ 您也可以将此文件移到任何所需的位置,然后按如下格式指定其绝对路径: +
++ proguard.config=/path/to/proguard.cfg ++ + +
当您在发布模式下构建应用时,无论是通过运行 ant release 还是通过使用 Eclipse 中的“导出向导”,构建系统都会自动检查是否设置了 proguard.config 属性。如果已设置该属性,ProGuard 会自动处理应用的字节码,然后再将所有内容打包到 .apk 文件中。在调试模式下进行构建时之所以不调用 ProGuard,是因为该工具会加大调试难度。
ProGuard 在运行后会输出以下文件:
+ +-
+
dump.txt
+ - 描述
.apk文件中所有类文件的内部结构
+
+ mapping.txt
+ - 列出原始与混淆后的类、方法和字段名称之间的对应关系。如果您从发布版本收到问题报告,则必须使用此文件,因为通过它可将混淆后的堆栈跟踪信息转换为原始的类、方法和成员名称。有关详情,请参阅解码混淆后的堆栈跟踪信息。 + +
seeds.txt
+ - 列出未混淆的类和成员 + +
usage.txt
+ - 列出从
.apk删除的代码
+
这些文件都位于以下目录中:
+ +-
+
<project_root>/bin/proguard(如果您使用的是 Ant)。
+
+ <project_root>/proguard(如果您使用的是 Eclipse)。
+
注意:每当您在发布模式下构建版本时,这些文件都会被 ProGuard 最新生成的文件覆盖。请在每次发布应用时为这些文件保存一份副本,以便反混淆来自发布版本的问题报告。如需详细了解为何要保存这些文件,请参阅调试已发布应用时应注意的事项。 +
+ +配置 ProGuard
+ +在某些情况下,proguard.cfg 文件中的默认配置足以满足您的需求。不过,在很多情况下,ProGuard 很难做出正确分析,因此可能会移除它认为无用而实际上您的应用却需要的代码。部分示例如下:
-
+
- 一个只在
AndroidManifest.xml文件中引用的类
+
+ - 一个通过 JNI 调用的方法 + +
- 动态引用的字段和方法 +
默认的 proguard.cfg 文件旨在涵盖一般的使用情形,但您可能会遇到异常情况,例如 ClassNotFoundException(此异常情况会在 ProGuard 删除您的应用调用的整个类时发生)。
您可以通过在 proguard.cfg 文件中添加一个 -keep 行,来修复因 ProGuard 在删除代码而造成的错误。例如:
+ -keep public class <MyClass> ++ +
在使用 -keep 选项时,您既有许多选择也有不少需要注意的方面,因此我们强烈建议您阅读 ProGuard 手册,详细了解如何自定义您的配置文件。该手册中的“Keep 选项概述”和“示例”部分尤其有用;问题排查部分则概述了在 ProGuard 删除代码后您可能会遇到的其他常见问题。
解码混淆后的堆栈跟踪信息
+ +当混淆后的代码输出堆栈跟踪信息时,方法名称会被混淆,即便仍能进行调试,难度也会很大。幸运的是,ProGuard 在每次运行时都会输出一个 <project_root>/bin/proguard/mapping.txt 文件,其中会显示与混淆后的名称相对应的原始的类、方法和字段名称。
Windows 上的 retrace.bat 脚本以及 Linux 或 Mac OS X 上的 retrace.sh 脚本可以将混淆后的堆栈跟踪信息转换成可读文件,此文件位于 <sdk_root>/tools/proguard/ 目录中。执行 retrace 工具的语法如下:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]+
例如:
+ +retrace.bat -verbose mapping.txt obfuscated_trace.txt+ +
如果您不为“<stacktrace_file>”指定值,retrace 工具会从标准输入中读取。
调试已发布应用时应注意的事项
+ +每次向用户发布应用时,都请保存所发布版本的 mapping.txt 文件。这样一来,如果用户遇到问题,并向您提交混淆后的堆栈跟踪信息,您就可以利用为每个发布版本保存的 mapping.txt 文件副本调试问题。每当您构建发布版本时,项目的 mapping.txt 文件都会被覆盖,因此您必须谨慎保存所需的版本。
例如,假设您发布了某个应用,并继续开发该应用的新功能,以便将来发布新版本。之后不久您使用 ProGuard 构建发布版本。此版本覆盖了之前的 mapping.txt 文件。之后,某位用户提交了问题报告,其中包含来自当前已发布的应用的堆栈跟踪信息。但您已无法调试该用户的堆栈跟踪信息,因为与该用户设备上的版本相关联的 mapping.txt 文件已被覆盖。除此之外,其他一些情况也可能会导致您的 mapping.txt 文件被覆盖。因此,如果您预计需要进行调试,请务必在每次发布应用时都保存一份副本。
如何保存 mapping.txt 文件由您自行决定。例如,您可以将其重命名以使其名称中包含版本号,也可以对其(连同源代码一起)进行版本管理。
概述
+-
+
- 了解发布应用需要哪些资源。 +
- 了解如何配置和构建应用以进行发布。 +
- 了解发布应用的最佳做法。 +
本文内容
+ +另请参见
+-
+
- 发布概述 +
- 为应用签名 +
- Google Play 发布检查清单 +
在将您的 Android 应用分发给用户之前,您需要先完成准备工作。对于所有 Android 应用,准备流程都是一项必须完成的开发任务,也是发布流程中的第一步(参见图 1)。
+ +当准备应用以进行发布时,您需要配置、构建并测试应用的发布版本。配置任务相当简单,涉及完成代码清理和代码修改这两项基本任务,从而达到优化应用的目的。构建流程与调试构建流程相似,可以使用 JDK 和 Android SDK 工具完成。测试任务就是做最终检查,以确保您的应用能在实际环境下正常运行。准备好要发布的应用后,您将获得一个已签名的 .apk 文件。您可以直接将该文件分发给用户,也可以通过 Google Play 等应用市场进行分发。
本文总结了您在准备应用以进行发布时需执行的几大任务。这些任务适用于所有 Android 应用,无论这些应用采用什么方式发布或分发给用户。如果您要通过 Google Play 发布应用,则还应查看 Google Play 发布检查清单,以确保您要发布的应用满足 Google Play 的所有要求。
+ +注意:在您执行本文所述任务之前,最好确保您的应用符合针对功能、性能和稳定性的所有发布标准。
+ +
+ + 图 1. 准备发布是一项必须完成的开发任务,也是发布流程中的第一步。 +
+ +简介
+ +为了向用户发布应用,您需要先创建发布版应用包,以供用户在其 Android 设备上安装和运行。发布版应用包与调试 .apk 文件中包含的组件相同(经过编译的源代码、资源、清单文件等),使用的构建工具也相同。不过,与调试 .apk 文件不同的是,发布版 .apk 文件已使用您自己的证书签名且使用 Zipalign 工具进行了优化。
+ + 图 2. 要准备应用以进行发布,您需执行五大任务。 +
+通常情况下,如果您使用 Eclipse 和 ADT 插件或 Ant 构建脚本(包含在 Android SDK 中)构建应用,可以无缝地完成签名和优化任务。例如,您可以使用 Eclipse“导出向导”一次性完成对应用的编译、签名和优化操作。如果通过命令行进行构建,您还可以配置 Ant 构建脚本来执行相同的操作。
+ +要准备应用以进行发布,您通常需要执行五大任务(参见图 2)。每项大任务可能包含一项或多项小任务,视您的应用发布方式而定。例如,如果您要通过 Google Play 发布应用,则可能需要在配置应用的发布版本时向清单中添加特殊的过滤规则。同样,为了满足 Google Play 发布指南的要求,您可能需要在收集发布材料时准备几张屏幕截图并撰写相关宣传文字。
+ +一般来说,在对应用进行了全面调试和测试后,您需要执行图 2 中列出的任务。Android SDK 中提供的几种工具可帮您测试和调试您的 Android 应用。有关详情,请参阅开发者指南中的调试和测试这两部分。
+ +收集材料和资源
+ +要开始准备应用以进行发布,您需要收集几项支持性的信息,其中至少应包含用于为应用签名的加密密钥以及应用图标。此外,您可能还需要提供最终用户许可协议。
+ +加密密钥
+ +Android 系统要求安装的每个应用都必须使用应用开发者拥有的证书(即开发者用于存放私钥的证书)进行数字签名。Android 系统利用该证书来识别应用作者并在应用之间建立信任关系。您用于签名的的证书无需由证书机构签名;Android 系统允许您使用自签名证书为您的应用签名。如需了解有关证书的要求,请参阅获取合适的私钥。
+ +重要提示:您的应用必须使用在 2033 年 10 月 22 日之后才会失效的加密密钥签名。
+ +如果您应用访问的服务或使用的第三方库需要基于您的私钥的附加密钥,则您还必须获得其他发布密钥。例如,如果您的应用使用 MapView 类(属于 Google 地图外部库),您需要让您的应用注册 Google 地图服务并获取 Maps API 密钥。如需了解如何获取 Maps API 密钥,请参阅获取 Maps API 密钥。
+ +应用图标
+ +请确保您有应用图标而且图标遵守建议的图标指南。应用的图标会显示在设备的主屏幕上和“启动器”窗口中,有助于用户识别您的应用。它还会显示在“管理应用”、“我的下载”等其他位置。此外,Google Play 等发布服务也会向用户显示您的应用图标。
+ +注意:如果您要在 Google Play 上发布应用,则需要创建高分辨率版本的图标。有关详情,请参阅应用的图形资源。
+ +最终用户许可协议
+ +请考虑为您的应用准备最终用户许可协议 (EULA)。最终用户许可协议可帮助保护您的员工、公司和知识产权,因此我们建议您为自己的应用提供一份。
+ +其他材料
+ +您可能还需要准备宣传和营销材料,用来宣传您的应用。例如,如果您要在 Google Play 上发布应用,则需要准备几段宣传文字并创建几张应用截图。有关详情,请参阅应用的图形资源
+ +配置应用以进行发布
+ +收集完所有支持材料后,您可以开始配置应用以进行发布。这部分总结了一些建议您在发布应用前对源代码、资源文件和应用清单进行的配置更改。虽然是否实施这里列出的大部分配置更改都由您决定,但这些都是良好的编码习惯。因此我们建议您实施这些更改。在某些情况下,您可能已在开发过程中实施了这些配置更改。
+ +选择合适的应用包名称
+ +请确保您选择的应用包名称适合在应用的整个生命周期中使用。将应用分发给用户后,您就无法再更改应用包名称。您可以在应用的清单文件中设置应用包名称。有关详情,请参阅介绍 package 属性的文档。
+ +停用日志记录和调试功能
+ +在构建应用的发布版本之前,请确保停用日志记录功能和调试选项。要停用日志记录功能,您可以移除源文件中对 Log 方法的调用。要停用调试功能,您可以从清单文件的 <application> 代码中移除 android:debuggable 属性或将 android:debuggable 属性设置为 false。此外,请移除您在项目中创建的所有日志文件或静态测试文件。
此外,您还应移除之前添加到代码中的所有 Debug 跟踪调用,例如 startMethodTracing() 和 stopMethodTracing() 方法调用。
重要提示:调试功能允许用户使用 Chrome DevTools 注入脚本和提取内容,因此如果您使用 WebView 展示付费内容或使用 JavaScript 界面,请确保停用应用的调试功能。要停用调试功能,请使用 WebView.setWebContentsDebuggingEnabled() 方法。
清理项目目录
+ +请清理您的项目,确保其符合 Android 项目中所述的目录结构要求。项目中留有散乱或孤立的文件会妨碍对应用的编译,导致应用发生异常。您至少应执行下列清理任务:
+ +-
+
- 查看
jni/、lib/和src/目录的内容。jni/目录应只包含与 Android NDK 相关联的源文件,例如.c、.cpp、.h和.mk文件。lib/目录应只包含第三方库文件或专用库文件,包括预构建的共享库和静态库(例如.so文件)。src/目录应只包含应用的源文件(.java和.aidl文件)。src/不应包含任何.jar文件。
+ - 检查项目中是否包含应用不需要的专用或专有数据文件,如果有请将其移除。例如,在项目的
res/目录中查找是否包含旧的图形文件、布局文件和值文件,如果您不再使用这些文件,请将其删除。
+ - 检查
lib/目录中是否包含测试库;如果您的应用不再使用这些库,请将其移除。
+ - 查看
assets/目录和res/raw/目录的内容,查找其中是否包含需在应用发布前更新或移除的原始资源文件和静态文件。
+
查看并更新清单设置
+ +确认下列清单项是否已正确设置:
+ +-
+
-
+ <uses-permission> 元素
+
您应该只指定应用必需的相关权限。
+
+ android:icon和android:label属性 +您必须为这些属性(位于 <application> 元素中)指定值。
+
+ android:versionCode和android:versionName属性。 +我们建议您为这些属性(位于 <manifest> 元素中)指定值。有关详情,请参阅应用的版本管理。
+
+
如果您要在 Google Play 上发布应用,还可以设置另外几个清单元素。例如,android:minSdkVersion 和 android:targetSdkVersion 属性(位于 <uses-sdk> 元素中)。如需详细了解这些设置以及其他 Google Play 设置,请参阅 Google Play 上的过滤器。
解决兼容性问题
+ +Android 提供了多种工具和技术,可让您的应用与多种设备兼容。为了让您的应用尽可能地适合更多用户,建议您执行以下操作:
+ +-
+
- 添加跨屏配置支持
+
确保您采取了支持跨屏的最佳做法。通过支持跨屏配置,您创建的应用可在 Android 支持的任何屏幕尺寸的设备上正常运行且拥有精美外观。
+
+ - 针对 Android 平板电脑优化应用
+
如果您的应用是专为运行 Android 3.0 以上版本的设备打造的,请遵照针对 Android 3.0 优化应用中所述的指南和最佳做法,这样您的应用就能与运行 Android 3.0 的设备兼容。
+
+ - 考虑使用支持库
+
如果您的应用是专为运行 Android 3.x 的设备打造的,请向您的应用项目中添加支持库,这样您的应用就能与较低版本的 Android 系统兼容。您可以将“支持库”提供的静态支持库添加到您的 Android 应用中,以便使用低版本的平台上未提供的 API 或使用不属于框架 API 的实用程序 API。
+
+
更新服务器和服务的网址
+ +如果您的应用需要访问远程服务器或服务,请确保您使用的是该服务器或服务的生产网址或路径,而非测试网址或路径。
+ +实施许可服务(如果您要在 Google Play 上发布应用)
+ +如果您要通过 Google Play 发布付费应用,请考虑支持 Google Play 许可服务。借助这项许可服务,您可以根据当前用户的购买情况控制其对您应用的访问权限。使用 Google Play 许可服务并不是强制的,即使您通过 Google Play 发布应用也可以不使用这项服务。
+ +如需详细了解 Google Play 许可服务以及如何在应用中使用该服务,请参阅应用许可。
+ +构建应用以进行发布
+ +配置好应用后,您可以将其构建为一个经过签名和优化的发布版 .apk 文件。JDK 中包含用于为 .apk 文件签名的工具(Keytool 和 Jarsigner);Android SDK 中包含用于编译和优化 .apk 文件的工具。如果您使用的是带 ADT 插件的 Eclipse 或是从命令行使用 Ant 构建脚本,则整个构建流程可以自动完成。
使用 Eclipse 进行构建
+ +您可以使用 Eclipse“导出向导”构建使用私钥签名并经过优化的发布版 .apk 文件。如需了解如何运行“导出向导”,请参阅使用 Eclipse ADT 进行编译和签名。“导出向导”会对您要发布的应用进行编译、使用私钥为应用签名并使用 Zipalign 工具对应用进行优化。如果您已通过 Eclipse 运行或调试过应用且未在应用中发现错误,“导出向导”就应该能成功运行(有关详情,请参阅使用带 ADT 的 Eclipse 构建和运行应用)。
“导出向导”假设您有适合为应用签名的证书和私钥。如果您没有合适的证书和私钥,“导出向导”将帮您生成一个(如需详细了解签名流程和签名指南,请参阅为应用签名)。
+ +使用 Ant 进行构建
+ +您可以使用 Ant 构建脚本(包含在 Android SDK 中)来构建使用私钥签名并经过优化的发布版 .apk 文件。如需了解具体做法,请参阅在发布模式下进行构建。这种构建方式假设您有适合为应用签名的证书和密钥。如果您没有合适的证书和私钥,“导出向导”将帮您生成一个(如需详细了解签名流程和签名指南,请参阅为应用签名)。
准备外部服务器和资源
+ +如果您的应用依赖于远程服务器,请确保该服务器是安全的且已经过配置,随时可投入实际使用。如果您要在应用中实施应用内结算,而且要在远程服务器上执行签名验证步骤,则必须这样做。
+ +此外,如果您的应用从远程服务器或实时服务中抓取内容(例如内容 Feed),请确保您提供的内容是最新的且随时可投入实际使用。
+ +测试应用以进行发布
+ +测试应用的发布版本有助于确保您的应用能在实际设备上和实际网络条件下正常运行。理想情况下,您至少应在一部手持设备上和一台平板电脑上测试您的应用,以确认界面元素的尺寸是否合适,以及应用的性能和能耗是否可接受。
+ +在测试之前,请先参阅测试内容。这篇文章总结了您在测试 Android 应用时应注意的常见情况。当您完成测试并确定应用的发布版本能正常运行后,就可以向用户发布您的应用了。有关详情,请参阅向用户发布应用。如果您要在 Google Play 上发布应用,请参阅 Google Play 发布检查清单。
+ + diff --git a/docs/html-intl/intl/zh-cn/tools/publishing/publishing_overview.jd b/docs/html-intl/intl/zh-cn/tools/publishing/publishing_overview.jd new file mode 100644 index 0000000000000..eb6a617f8e2f6 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/tools/publishing/publishing_overview.jd @@ -0,0 +1,142 @@ +page.title=发布概述 +page.type=工具 + +@jd:body + +概述
+-
+
- 了解如何发布 Android 应用。 +
- 了解如何准备应用以进行发布。 +
- 了解如何向用户发布应用。 +
本文内容
+ +另请参见
+ +发布是将您的 Android 应用提供给用户的常规流程。您在发布 Android 应用时需要执行两大任务:
+ +-
+
- 准备应用以进行发布。
+
在准备阶段,您需要构建应用的发布版本,以供 Android 设备用户下载和安装。
+
+ - 向用户发布应用。
+
在发布阶段,您向用户宣传、销售和分发应用的发布版本。
+
+
通常情况下,您可以通过 Google Play 等应用市场发布应用。不过,您也可以通过以下方式发布应用:将应用直接发送给用户;让用户从您的网站下载应用。
+ +图 1 展示了发布流程在整个 Android 应用开发流程中所处的位置。一般来说,您要先在调试环境中完成对应用的测试,然后再执行发布流程。此外,在开始发布流程之前,您最好确保应用符合针对功能、性能和稳定性的所有发布标准。
+ +
++ 图 1. 发布是 Android 应用开发流程中的最后一个阶段。 +
+ +准备应用以进行发布
+ +发布之前的准备过程涉及多个步骤,需要您完成以下任务:
+ +-
+
- 配置应用以进行发布。
+
您至少需要从清单文件中移除
+Log调用和 android:debuggable 属性,还应为android:versionCode和android:versionName属性(位于 <manifest> 元素中)提供值。此外,您还可能需要配置多项其他设置,以符合 Google Play 的发布要求,或者符合其他应用发布方式的要求。
+ - 构建应用的发布版本并签名。
+
Android SDK 工具中随附的 Android Development Tools (ADT) 插件和 Ant 构建脚本可向您提供构建应用的发布版本并签名所需的全部信息。
+
+ - 测试应用的发布版本。
+
在分发应用之前,您至少应在一部适配的手机和一台适配的平板电脑上全面测试应用的发布版本。
+
+ - 更新应用资源以进行发布。
+
您需确保所有应用资源(例如多媒体文件和图形)都是最新的,且已包含在应用中或者已存储到正确的生产服务器上。
+
+ - 准备应用所依赖的远程服务器和服务。
+
如果您的应用依赖于外部服务器或服务,您要确保这些服务器或服务是安全的,随时可投入实际使用。
+
+
在准备阶段,您可能还需要执行其他一些任务。例如,您需要获取私钥来为应用签名;如果您使用 Google 地图外部库,则需要获取 Maps API 发布密钥。此外,您还需要为应用创建一个图标,而且可能需要准备最终用户许可协议 (EULA) 以保护您的员工、公司和知识产权。
+ +当您完成发布应用所需的准备工作之后,您将得到一个已签名的 .apk 文件,可以将文件分发给用户。
要了解如何准备应用以进行发布,请参阅开发者指南中的准备发布。这篇文章提供了有关如何配置和构建应用的发布版本的分步说明。
+ +向用户发布应用
+ +您可以通过多种方式发布您的 Android 应用。通常情况下,您通过 Google Play 等应用市场发布应用,但您也可以在自己的网站上发布应用或直接将应用发送给用户。 + +
通过应用市场发布应用
+ +如果您希望向尽可能多的目标用户分发应用,最好通过 Google Play 等应用市场发布应用。
+ +Google Play 是 Android 应用的主要市场,它尤其适合向遍布全球的众多目标用户分发您的应用。不过,您也可以通过自己喜欢的其他应用市场分发您的应用,也可以在多个市场中分发。
+ + +在 Google Play 上发布应用
+ +Google Play 是一个强大的应用发布平台,可帮助您向全球用户宣传、销售和分发您的 Android 应用。当通过 Google Play 发布应用时,您可以使用一系列开发者工具,分析您的销售数据、了解市场趋势以及控制向哪些用户分发应用。此外,您还能使用多种有助您增加收入的功能,如应用内结算和应用许可。丰富的工具和功能,以及为数众多的最终用户社区功能,让 Google Play 成为销售和购买 Android 应用的主要平台。
+ +在 Google Play 上发布应用相当简单,只需三个基本步骤:
+ +-
+
- 准备宣传材料。
+
为了充分利用 Google Play 的营销和宣传功能,您需要为应用制作宣传材料,例如屏幕截图、视频、图形以及宣传文字。
+
+ - 配置选项并上传资源。
+
利用 Google Play,您可以将应用定位到全球的用户和设备。通过配置各种 Google Play 设置,您可以选择要覆盖的国家/地区、要使用的商品详情语言以及应用在各个国家/地区的价格。此外,您还可以配置商品详情,例如应用类型、类别和内容分级。配置各种选项之后,您可以上传宣传材料和草稿版(未发布的)应用。
+
+ - 发布应用的发布版本。
+
如果您确认各项发布设置均配置正确,而且您上传的应用可以公开发布,只需点击开发者控制台中的发布即可。在几分钟之内,您的应用就会发布到网络上供全球用户下载。
+
+
如需了解完整信息,请访问 Google Play。
+ + +通过电子邮件发布应用
+ +
+ + 图 1. 当您通过电子邮件向用户发送应用时,用户只需点击安装即可。 +
+最简单快捷的应用发布方式就是通过电子邮件将应用发送给用户。为此,您需要准备好应用的发布版本,将其添加为电子邮件的附件,然后发送给用户。当用户在其 Android 设备上打开您的电子邮件时,Android 系统会识别出该 APK 并在电子邮件中显示立即安装按钮(参见图 1)。用户触摸该按钮即可安装您的应用。
+ +注意:只有当用户将其设备配置为允许安装来自未知来源的应用且通过本机的 Gmail 应用打开您的电子邮件时,才会出现图 1 所示的立即安装按钮。
+ +如果您只将应用发送给几位受信任的用户,那么通过电子邮件分发就非常方便。不过,这种发布方式不利于阻止盗版和未经授权的分发,也就是说,收到您应用的任何人都可以将应用转发给其他人。
+ +通过网站发布应用
+ +如果您不想在 Google Play 这样的市场上发布应用,则可以将应用放在您的网站或服务器(包括私人服务器或企业服务器)上供用户下载。为此,您必须先按正常流程准备好应用的发布版本,然后您只需将准备好的 APK 文件托管到网站上并向用户提供下载链接即可。 +
+ +当用户在其 Android 设备上访问该下载链接时,文件就会开始下载,Android 系统会在下载完成后自动将应用安装到设备上。不过,只有当用户将其“设置”配置为允许安装来自未知来源的应用时,安装进程才会自动启动。
+ +虽然在您的网站上发布应用相对比较简单,但效率可能并不高。例如,如果您想通过自己的应用获利,则必须自行处理和跟踪所有财务交易且不能使用 Google Play 的应用内结算服务来销售应用内商品。此外,您也不能使用许可服务来阻止他人未经授权安装和使用您的应用。
+ + +用户选择安装来自未知来源的应用
+ +
+ + 图 2. 用户必须启用未知来源设置,才能安装从 Google Play 以外的位置下载的应用。 +
+Android 可防止用户无意中从 Google Play(受信任的市场)以外的位置下载并安装应用。只要用户未启用“设置”>“安全”下的未知来源(如图 2 所示),它就会阻止此类安装。要允许安装来自其他来源的应用,用户必须在其设备上启用“未知来源”设置,且必须先更改此项配置才能将您的应用下载到设备上。
+ +请注意,部分网络提供商不允许用户安装来自未知来源的应用。
diff --git a/docs/html-intl/intl/zh-cn/training/basics/fragments/fragment-ui.jd b/docs/html-intl/intl/zh-cn/training/basics/fragments/fragment-ui.jd new file mode 100644 index 0000000000000..51a4e278e5bc3 --- /dev/null +++ b/docs/html-intl/intl/zh-cn/training/basics/fragments/fragment-ui.jd @@ -0,0 +1,139 @@ +page.title=构建灵活的界面 +trainingnavtop=true +page.type=培训 +@jd:body + +在设计支持各种屏幕尺寸的应用时,你可以在不同的布局配置中重复使用 Fragment ,以便根据相应的屏幕空间提供更出色的用户体验。
+ +例如,一次只显示一个 Fragment 可能就很适合手机这种单窗格界面,但在平板电脑上,你可能需要设置并列的 Fragment,因为平板电脑的屏幕尺寸较宽阔,可向用户显示更多信息。
+ +
+ 图 1: 两个 Fragment,显示在不同尺寸屏幕上同一 Activity 的不同配置中。在较宽阔的屏幕上,两个 Fragment 可并列显示;在手机上,一次只能显示一个 Fragment,因此必须在用户导航时更换 Fragment。
+ +利用 FragmentManager 类提供的方法,你可以在运行时添加、移除和替换 Activity 中的 Fragment,以便为用户提供一种动态体验。
在运行时向 Activity 添加 Fragment
+ +你可以在 Activity 运行时向其添加 Fragment,而不用像上一课中介绍的那样,使用 <fragment> 元素在布局文件中为 Activity 定义 Fragment。如果你打算在 Activity 运行周期内更改 Fragment,就必须这样做。
要执行添加或移除 Fragment 等事务,你必须使用 FragmentManager 创建一个 FragmentTransaction,后者可提供用于执行添加、移除、替换以及其他 Fragment 事务的 API。
如果 Activity 中的 Fragment 可以移除和替换,你应在调用 Activity 的 onCreate() 方法期间为 Activity 添加初始 Fragment(s)。
在处理 Fragment(特别是在运行时添加的 Fragment )时,请谨记以下重要规则:必须在布局中为 Fragment 提供 View 容器,以便保存 Fragment 的布局。
下面是上一课所示布局的替代布局,这种布局一次只会显示一个 Fragment。要用一个 Fragment 替换另一个 Fragment, Activity 的布局中需要包含一个作为 Fragment 容器的空 FrameLayout。
请注意,该文件名与上一课中布局文件的名称相同,但布局目录没有 large 这一限定符。因此,此布局会在设备屏幕小于“large”的情况下使用,原因是尺寸较小的屏幕不适合同时显示两个 Fragment。
res/layout/news_articles.xml:
+ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/fragment_container" + android:layout_width="match_parent" + android:layout_height="match_parent" /> ++ +
在 Activity 内部,使用 Support Library API 调用 getSupportFragmentManager() 以获取 FragmentManager,然后调用 beginTransaction() 创建 FragmentTransaction,同时调用 add() 添加 Fragment。
你可以使用同一个 FragmentTransaction 对 Activity 执行多 Fragment 事务。当你准备好进行更改时,必须调用 commit()。
例如,下面介绍了如何为上述布局添加 Fragment :
+ +
+ import android.os.Bundle;
+ import android.support.v4.app.FragmentActivity;
+
+ public class MainActivity extends FragmentActivity {
+ &Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.news_articles);
+
+ // 确认 Activity 使用的布局版本包含
+ // fragment_container FrameLayout
+ if (findViewById(R.id.fragment_container) != null) {
+
+ // 不过,如果我们要从先前的状态还原,
+ // 则无需执行任何操作而应返回
+ // 否则就会得到重叠的 Fragment 。
+ if (savedInstanceState != null) {
+ return;
+ }
+
+ // 创建一个要放入 Activity 布局中的新 Fragment
+ HeadlinesFragment firstFragment = new HeadlinesFragment();
+
+ // 如果此 Activity 是通过 Intent 发出的特殊指令来启动的,
+ // 请将该 Intent 的 extras 以参数形式传递给该 Fragment
+ firstFragment.setArguments(getIntent().getExtras());
+
+ // 将该 Fragment 添加到“fragment_container”FrameLayout 中
+ getSupportFragmentManager().beginTransaction()
+ .add(R.id.fragment_container, firstFragment).commit();
+ }
+ }
+ }
+
+
+ 由于该 Fragment 已在运行时添加到 FrameLayout 容器中,而不是在 Activity 布局中通过 <fragment> 元素进行定义,因此该 Activity 可以移除和替换这个 Fragment 。
用一个 Fragment 替换另一个 Fragment
+ +替换 Fragment 的步骤与添加 Fragment 的步骤相似,但需要调用 replace() 方法,而非 add()。
请注意,当你执行替换或移除 Fragment 等 Fragment 事务时,最好能让用户向后导航和“撤消”所做更改。要通过 Fragment 事务允许用户向后导航,你必须调用 addToBackStack(),然后再执行 FragmentTransaction。
注意:当你移除或替换 Fragment 并向返回堆栈添加事务时,已移除的 Fragment 会停止(而不是销毁)。如果用户向后导航,还原该 Fragment,它会重新启动。如果你没有向返回堆栈添加事务,那么该 Fragment 在移除或替换时就会被销毁。
+ +替换 Fragment 的示例:
+ +
+ // 创建 Fragment 并为其添加一个参数,用来指定应显示的文章
+ ArticleFragment newFragment = new ArticleFragment();
+ Bundle args = new Bundle();
+ args.putInt(ArticleFragment.ARG_POSITION, position);
+ newFragment.setArguments(args);
+
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+
+ // 将 fragment_container View 中的内容替换为此 Fragment ,
+ // 然后将该事务添加到返回堆栈,以便用户可以向后导航
+ transaction.replace(R.id.fragment_container, newFragment);
+ transaction.addToBackStack(null);
+
+ // 执行事务
+ transaction.commit();
+
+
+ addToBackStack() 方法可接受可选的字符串参数,来为事务指定独一无二的名称。除非你打算使用 FragmentManager.BackStackEntry API 执行高级 Fragment 操作,否则无需使用此名称。
+
+
+
+
+
+
+
+
+
+
+
+
+ 


+
+
+
+
+
+
+
+
+
+
+