在开始向您的应用添加许可证验证之前,您需要设置您的 Google Play 发布帐户、开发环境以及验证您的实现所需的任何测试帐户。
设置发布者帐户
如果您还没有 Google Play 的发布者帐户,则需要使用您的 Google 帐户注册一个帐户,并同意 Google Play 服务条款。
有关更多信息,请参阅开始发布。
如果您已经在 Google Play 上拥有发布者帐户,请使用您的 Play 管理中心设置许可。
使用 Google Play 管理中心,您可以
- 获取用于许可的特定于应用的公钥
- 在发布应用之前调试和测试应用的许可实现
- 发布您已添加许可支持的应用
许可的管理设置
您可以在 Play 管理中心管理 Google Play 许可的多个管理控制。这些控件允许您
- 设置多个“测试帐户”,通过电子邮件地址标识。许可服务器允许在设备或模拟器上登录到测试帐户的用户发送许可检查并接收静态测试响应。您可以在 Play 管理中心的“帐户详细信息”页面中设置帐户。
- 配置服务器在收到来自登录到发布者帐户或测试帐户的用户上传到发布者帐户的应用的许可检查时发送的静态测试响应。您可以在 Play 管理中心的“帐户详细信息”页面中设置测试响应。
- 获取应用的用于许可的公钥。在应用中实施许可时,必须将公钥字符串复制到应用中。您可以在“服务和 API”页面(在“所有应用”下)获取应用的用于许可的公钥。
有关如何使用测试帐户和静态测试响应的更多信息,请参阅下面的设置测试环境。
设置开发环境
设置许可的开发环境涉及以下任务
- 设置运行时环境进行开发
- 将 LVL 下载到您的 SDK 中
- 设置许可验证库
- 在您的应用中包含 LVL 库项目
以下部分描述了这些任务。完成设置后,您可以开始向您的应用添加许可。
首先,您需要设置一个合适的运行时环境,您可以在该环境中运行、调试和测试应用的许可证检查和执行实现。
设置运行时环境
如前所述,应用不是通过直接联系许可服务器来检查许可状态,而是通过绑定到 Google Play 应用提供的服务并启动许可检查请求来检查许可状态。然后,Google Play 服务处理与许可服务器的直接通信,最后将响应路由回您的应用。要调试和测试应用中的许可,您需要设置一个包含必要 Google Play 服务的运行时环境,以便您的应用能够将许可检查请求发送到许可服务器。
您可以使用两种类型的运行时环境
- 包含 Google Play 应用的 Android 设备,或
- 运行 Google APIs 附加组件(API 级别 8(发行版 2)或更高版本)的 Android 模拟器
在设备上运行
要使用 Android 设备调试和测试许可,该设备必须
- 运行兼容的 Android 1.5 或更高版本(API 级别 3 或更高版本)平台,并且
- 运行预安装了 Google Play 客户端应用的系统镜像。
如果系统镜像中没有预安装 Google Play,您的应用将无法与 Google Play 许可服务器通信。
有关如何设置设备以用于开发 Android 应用的常规信息,请参阅使用硬件设备。
在 Android 模拟器上运行
如果您没有可用的设备,可以使用 Android 模拟器调试和测试许可。
由于 Android SDK 中提供的 Android 平台不包含 Google Play,因此您需要从 SDK 存储库下载 Google APIs 附加组件平台(API 级别 8 或更高版本)。下载附加组件后,您需要创建一个使用该系统镜像的 AVD 配置。
Google APIs 附加组件不包含完整的 Google Play 客户端。但是,它确实提供
- 一个实现
ILicensingService
远程接口的 Google Play 后台服务,以便您的应用可以通过网络将许可检查发送到许可服务器。 - 一组底层帐户服务,允许您在 AVD 上添加 Google 帐户并使用您的发布者帐户或测试帐户凭据登录。
使用您的发布者帐户或测试帐户登录,您可以调试和测试您的应用程序,而无需将其发布。更多信息请参见下面的登录授权帐户。
通过 SDK 管理器可以获得多个版本的 Google APIs 插件,但只有 Android 2.2 及更高版本的插件包含必要的 Google Play 服务。
要为应用程序添加许可设置模拟器,请按照以下步骤操作
- 启动 Android SDK Manager,它位于 Android Studio 工具菜单下(**工具 > Android > SDK Manager**),或者通过执行
<sdk>/tools/android sdk
启动。 - 选择并下载您要定位的 Android 版本的 **Google APIs**(必须为 Android 2.2 或更高版本)。
- 下载完成后,打开 AVD Manager,它位于 Android Studio 工具菜单下(**工具 > Android > AVD Manager**),或者通过执行
<sdk>/tools/android avd
启动。 - 在*Android 虚拟设备管理器*窗口中,选择**+ 创建虚拟设备**以设置新 AVD 的配置详细信息。
- 在*虚拟设备配置*窗口中,选择设备硬件,然后选择**下一步**。
- 选择**Google API**作为在新 AVD 上运行的系统映像,然后选择**下一步**。
- 为 AVD 分配一个描述性名称,然后根据需要设置其他配置详细信息。
- 选择**完成**以创建新的 AVD 配置,该配置将显示在可用 Android 虚拟设备列表中。
如果您不熟悉 AVD 或如何使用它们,请参见管理虚拟设备。
更新您的项目配置
在您设置了满足上述要求的运行时环境后(在实际设备或模拟器上),请确保根据需要更新您的应用程序项目或构建脚本,以便使用许可的已编译.apk
文件部署到该环境中。特别是,如果您在 Android Studio 中开发,请确保您设置了针对相应设备或 AVD 的运行/调试配置。
如果项目已配置为针对标准 Android 1.5(API 级别 3)或更高版本的库进行编译,则您无需对应用程序的构建配置进行任何更改。向应用程序添加许可不会对应用程序的构建配置产生任何影响。
下载 LVL
许可证验证库 (LVL) 是一个辅助类集合,它极大地简化了您为应用程序添加许可所需的工作。在所有情况下,我们都建议您下载 LVL 并将其用作应用程序中许可实现的基础。
许可证验证库 (LVL) 在 GitHub 上开发。您可以克隆LVL 代码库并将其设置为库项目。在命令行中键入以下内容来克隆代码库
git clone https://github.com/google/play-licensing
代码库包含:
- LVL 源代码,存储在 Android 库项目中。
- 一个名为“sample”的示例应用程序,它依赖于 LVL 库项目。该示例演示了应用程序如何使用库辅助类来检查和执行许可。
设置许可证验证库
将 LVL 下载到您的计算机后,您需要在您的开发环境中将其设置为 Android 库项目,或者直接将库源代码复制(或导入)到您现有的应用程序包中。通常情况下,建议将 LVL 用作库项目,因为它允许您在多个应用程序中重用许可代码,并更容易地随着时间的推移进行维护。请注意,LVL 不是设计为单独编译并作为静态 .jar 文件添加到应用程序中的。
使用 LVL 的推荐方法是将其设置为新的 Android *库项目*。库项目是一种开发项目,它包含共享的 Android 源代码和资源。其他 Android 应用程序项目可以引用库项目,并在构建时将其编译的源代码包含在其.apk
文件中。在许可的上下文中,这意味着您只需在库项目中完成大部分许可开发工作,然后将库源代码包含在您的各种应用程序项目中。通过这种方式,您可以轻松地在所有项目中维护统一的许可实现,并集中维护它。如果您不熟悉库项目或如何使用它们,请参见管理项目。
LVL 提供为已配置的库项目——下载后,您可以立即开始使用它。
如果您在 Android Studio 中工作,则需要将 LVL 添加到您的项目中作为一个新模块。
- 使用“从源导入模块”窗口通过选择**文件 > 新建 > 导入模块**来导入库模块。
- 在*从源导入模块*窗口的*源目录*中,输入 LVL 的
library
目录(包含库的 AndroidManifest.xml 文件的目录)作为项目根目录(<sdk>/extras/google/play_licensing/library/AndroidManifest.xml
),然后选择**下一步**。 - 选择**完成**以导入库模块。
有关如何在 Android Studio 中使用库模块的更多信息,请参见创建 Android 库。
在您的应用程序中包含 LVL 库项目源代码
如果您想将 LVL 源代码用作库项目,则需要在应用程序项目属性中添加对 LVL 库项目的引用。这将告诉构建工具在编译时将 LVL 库项目源代码包含在您的应用程序中。添加对库项目引用的过程取决于您的开发环境,如下所述。
如果您使用 Android Studio 进行开发,则应该已经将库模块添加到您的项目中,如上一节所述。如果您还没有这样做,请在继续之前执行此操作。
如果您使用 SDK 命令行工具进行开发,请导航到包含您的应用程序项目的目录,然后打开project.properties
文件。向文件中添加一行,该行指定android.library.reference.<n>
键和库的路径。例如:
android.library.reference.1=path/to/library_project
或者,您可以使用此命令来更新项目属性,包括对库项目的引用:
android update lib-project --target <target_ID> \ --path path/to/my/app_project \ --library path/to/my/library_project
有关使用库项目的更多信息,请参见设置库项目。
设置测试环境
Google Play Console 提供配置工具,让您和其他人可以在发布应用程序之前测试应用程序的许可。在实现许可的过程中,您可以使用 Play Console 工具来测试应用程序的策略以及对不同许可响应和错误条件的处理。
许可测试环境的主要组件包括:
- 发布者帐户中的“测试响应”配置,允许您设置返回的静态许可响应,当服务器处理上传到发布者帐户的应用程序的许可证检查时,该响应来自登录到发布者帐户或测试帐户的用户。
- 一组可选的测试帐户,当它们检查您已上传的应用程序的许可证时(无论应用程序是否已发布),都将收到静态测试响应。
- 应用程序的运行时环境,包括 Google Play 应用程序或 Google APIs 插件,用户已登录到发布者帐户或其中一个测试帐户。
正确设置测试环境涉及:
以下各节提供更多信息。
设置许可证检查的测试响应
Google Play 在您的发布者帐户中提供了一个配置设置,允许您覆盖许可证检查的正常处理并返回指定的静态响应代码。此设置仅用于测试,并且*仅*适用于您已上传的应用程序的许可证检查,由使用发布者帐户或已注册测试帐户的凭据登录到模拟器或设备的任何用户进行。对于其他用户,服务器始终根据正常规则处理许可证检查。
要为您的帐户设置测试响应,请登录到您的发布者帐户并单击“编辑个人资料”。在“编辑个人资料”页面中,找到许可面板中的“测试响应”菜单,如下所示。您可以从完整的有效服务器响应代码集中进行选择,以控制您想要在应用程序中测试的响应或条件。
通常,您应该确保使用“测试响应”菜单中提供的每个响应代码测试应用程序的许可实现。有关代码的说明,请参阅许可参考中的服务器响应代码。
请注意,您配置的测试响应适用于整个帐户,也就是说,它不适用于单个应用程序,而是适用于与发布者帐户关联的*所有*应用程序。如果您同时测试多个应用程序,更改测试响应将影响所有这些应用程序在下次许可证检查中的行为(如果用户使用发布者帐户或测试帐户登录到模拟器或设备)。
在成功接收许可证检查的测试响应之前,您必须登录到安装了应用程序并从中查询服务器的设备或模拟器。具体来说,您必须使用您的发布者帐户或您已设置的测试帐户之一进行登录。有关测试帐户的更多信息,请参见下一节。
请参阅 服务器响应代码,了解可用的测试响应列表及其含义。
设置测试账户
在某些情况下,您可能希望让多个开发团队测试最终将通过您的发布者账户发布的应用程序的许可,而无需向他们提供您的发布者账户的登录凭据。为了满足这一需求,Google Play Console 允许您设置一个或多个可选的测试账户——这些账户被授权查询许可服务器并从您的发布者账户接收静态测试响应。
测试账户是您在发布者账户上注册的标准 Google 账户,以便它们接收您已上传的应用程序的测试响应。然后,开发人员可以使用测试账户凭据登录其设备或模拟器,并从已安装的应用程序启动许可检查。当许可服务器从测试账户用户处收到许可检查时,它将返回为发布者账户配置的静态测试响应。
当然,通过测试账户登录的用户在访问权限和权限方面存在一些限制,包括:
- 测试账户用户只能查询已上传到发布者账户的应用程序的许可服务器。
- 测试账户用户无权将应用程序上传到您的发布者账户。
- 测试账户用户无权设置发布者账户的静态测试响应。
下表总结了发布者账户、测试账户和其他账户的功能差异。
账户类型 | 上传前能否检查许可? | 能否接收测试响应? | 能否设置测试响应? |
---|---|---|---|
发布者账户 | 是 | 是 | 是 |
测试账户 | 否 | 是 | 否 |
其他账户 | 否 | 否 | 否 |
在发布者账户上注册测试账户
首先,您需要在发布者账户中注册每个测试账户。如图 2 所示,您可以在发布者账户的“编辑个人资料”页面中的“许可”面板中注册测试账户。只需输入账户(以逗号分隔)并点击保存即可保存您的个人资料更改。
您可以使用任何 Google 账户作为测试账户。如果您想拥有和控制测试账户,您可以自己创建账户并将凭据分发给您的开发人员或测试人员。
处理测试账户用户的应用程序上传和分发
如上所述,测试账户用户只能接收已上传到发布者账户的应用程序的静态测试响应。由于这些用户无权上传应用程序,因此作为发布者,您需要与这些用户合作以收集待上传的应用程序并分发已上传的应用程序以进行测试。您可以通过任何方便的方式来处理收集和分发。
应用程序上传并为许可服务器所知后,开发人员和测试人员可以在其本地开发环境中继续修改应用程序,无需上传新版本。只有当本地应用程序递增清单文件中的versionCode
属性时,您才需要上传新版本。
将您的公钥分发给测试账户用户
许可服务器以常规方式处理静态测试响应,包括签署许可响应数据、添加额外参数等。为了支持使用测试账户而不是发布者账户实现许可的开发人员,您需要将应用程序的许可公钥分发给他们。没有访问 Play Console 权限的开发人员无法访问应用程序的公钥,如果没有密钥,他们将无法验证许可响应。
请注意,如果您由于某种原因决定为应用程序生成新的许可密钥对,则需要通知所有测试账户用户。对于测试人员,您可以将新密钥嵌入应用程序包中并分发给用户。对于开发人员,您需要直接将新密钥分发给他们。
在运行时环境中登录授权账户
许可服务旨在确定给定用户是否有权使用给定应用程序——在许可检查期间,Google Play 应用程序会从系统上的主账户收集用户 ID 并将其与应用程序的包名和其他信息一起发送到服务器。但是,如果没有可用的用户信息,则许可检查将无法成功,因此 Google Play 应用程序将终止请求并向应用程序返回错误。
在测试期间,为确保您的应用程序能够成功查询许可服务器,您必须确保您使用以下方法登录设备或模拟器上的账户:
- 发布者账户的凭据,或
- 已在发布者账户中注册的测试账户的凭据
在模拟器上登录 Google 账户
如果您在模拟器上测试许可,则需要在模拟器上登录 Google 账户。如果您没有看到创建新 Google 账户的选项,问题可能是您的 AVD 运行的是标准 Android 系统映像,而不是 Google APIs Add-On,API 8(版本 2)或更高版本。
更多信息,请参阅上面的 设置运行时环境。
使用发布者账户登录的好处是,即使在将应用程序上传到 Play Console 之前,您的应用程序也能接收静态测试响应。
如果您属于大型组织或与外部团队合作开发将通过您的网站发布的应用程序,您更有可能希望分发测试账户,然后使用这些账户在测试期间登录。
要在设备或模拟器上登录,请按照以下步骤操作。首选方法是以主账户登录——但是,如果设备或模拟器上已经有其他账户正在使用,您可以创建其他账户并使用发布者或测试账户凭据登录。
- 打开设置 > 账户和同步
- 选择添加账户并选择添加 Google 账户。
- 选择下一步,然后选择登录。
- 输入发布者账户或在发布者账户中注册的测试账户的用户名和密码。
- 选择登录。系统将您登录到新账户。
登录后,您可以开始测试应用程序中的许可(如果您已完成上述 LVL 集成步骤)。当您的应用程序启动许可检查时,它将收到包含在发布者账户上配置的静态测试响应的响应。
请注意,如果您使用的是模拟器,则每次在重新启动模拟器时清除数据时,都需要登录发布者账户或测试账户。
完成设置过程后,请继续 向您的应用添加许可。