设置许可

在开始向应用添加许可验证机制之前,您需要设置 Google Play 发布账号、开发环境以及验证实现所需的所有测试账号。

设置发布商账号

如果您还没有 Google Play 发布商账号,则需要使用 Google 账号注册一个并同意接受 Google Play 服务条款。

如需了解详情,请参阅开始发布

如果您在 Google Play 上已有发布商账号,请使用 Play 管理中心设置许可。

使用 Google Play 管理中心,您可以:

  • 获取应用特定的许可公钥
  • 在发布应用之前,调试并测试应用的许可实现
  • 发布您已向其中添加许可支持的应用

许可的管理设置

您可以在 Play 管理中心内管理多项针对 Google Play 许可的管理控件。这些控件可用于:

  • 设置多个以电子邮件地址标识的“测试账号”。用户可以登录许可服务器在设备或模拟器上测试账号,以便发送许可检查并接收静态测试响应。您可以在 Play 管理中心的“账号详情”页面设置账号。
  • 配置静态测试响应,服务器在从登录发布商账号或测试账号的用户处收到针对上传至发布商账号的应用进行的许可检查时会发送该静态测试响应。您可以在 Play 管理中心的“账号详情”页面设置测试响应。
  • 获取应用的许可公钥。在应用中实现许可机制时,必须将公钥字符串复制到应用中。您可以在“服务和 API”页面(“所有应用”下)获取应用的许可公钥。

图 1. 应用的许可密钥可通过 Play 管理中心的“服务和 API”页面获取。

如需详细了解如何使用测试账号和静态测试响应,请参阅下文的设置测试环境

设置开发环境

针对许可设置您的环境涉及以下任务:

  1. 为开发设置运行时环境
  2. LVL 下载到您的 SDK 中
  3. 设置许可验证库
  4. 在应用中包含 LVL 库项目

下面几部分介绍了这些任务。完成设置后,您就可以开始向您的应用添加许可机制

首先,您需要设置适当的运行时环境,以便运行、调试和测试应用的许可检查和执行机制的实现。

设置运行时环境

如前所述,应用检查许可状态不是通过直接联系许可服务器,而是通过绑定到 Google Play 应用提供的服务并启动许可检查请求。然后,Google Play 服务会处理与许可服务器的直接通信,并最终将响应发回您的应用。为了在应用中调试和测试许可机制,您需要设置包含必要的 Google Play 服务的运行时环境,以便您的应用能够向许可服务器发送许可检查请求。

您可以使用两种类型的运行时环境:

  • 包含 Google Play 应用的 Android 设备,或
  • 运行 Google API 插件且 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 API 插件平台 API 级别 8(或更高级别)。下载该插件后,您需要创建使用该系统映像的 AVD 配置。

Google API 插件不包含完整的 Google Play 客户端。不过,它确实提供了以下服务:

  • 一项 Google Play 后台服务,用于实现 ILicensingService 远程接口以便应用可以通过网络向许可服务器发送许可检查。
  • 一组基础账号服务,让您可以在 AVD 上添加 Google 账号并使用您的发布商账号或测试账号凭据登录。

    通过使用发布商账号或测试账号登录,您可以在不发布应用的情况下调试和测试应用。如需了解详情,请参阅下文的登录授权账号

通过 SDK 管理器可以使用多个版本的 Google API 插件,但只有 Android 2.2 及更高版本包含必要的 Google Play 服务。

如需设置用于向应用添加许可机制的模拟器,请按以下步骤操作:

  1. 启动 Android Studio 的“Tools”菜单下的 Android SDK 管理器 (Tools > Android > SDK Manager) 或执行 <sdk>/tools/android sdk
  2. 为您的目标 Android 版本(必须为 Android 2.2 或更高版本)选择并下载 Google API
  3. 下载完成后,打开 Android Studio 的“Tools”菜单下的 AVD 管理器 (Tools > Android > AVD Manager) 或执行 <sdk>/tools/android avd
  4. Android Virtual Device Manager 窗口中,选择 + Create Virtual Device 以设置新 AVD 的配置详情。
  5. Virtual Device Configuration 窗口中,选择设备硬件,然后选择 Next
  6. 选择一个 Google API 作为要在新 AVD 上运行的系统映像,然后选择 Next
  7. 为 AVD 指定一个描述性名称,然后根据需要设置其他配置详细信息。
  8. 选择 Finish 以创建新的 AVD 配置,这将显示在可用的 Android 虚拟设备列表中。

如果您不熟悉 AVD 或 AVD 使用方式,请参阅管理虚拟设备

更新项目配置

在实际设备或模拟器上设置满足上述要求的运行时环境后,请务必根据需要更新您的应用项目或构建脚本,以便将您编译的使用许可机制的 .apk 文件部署到该环境中。特别是,如果您是在 Android Studio 中进行开发,请确保设置针对相应设备或 AVD 的运行/调试配置。

您无需对应用的 build 配置进行任何更改,前提是项目已配置为针对标准 Android 1.5(API 级别 3)或更高版本库进行编译。向应用添加许可机制应该不会对应用的 build 配置产生任何影响。

下载 LVL

许可验证库 (LVL) 是一个帮助程序类的集合,可显著简化向应用添加许可机制所需执行的操作。在任何情况下,我们都建议您下载 LVL 并将其用作应用中许可机制实现的基础。

许可验证库 (LVL) 是在 GitHub 上开发的。您可以克隆 LVL 代码库 并将其设置为库项目。通过在命令行键入以下内容来克隆代码库:

git clone https://github.com/google/play-licensing

代码库包括:

  • 存储在 Android 库项目中的 LVL 源代码。
  • 依赖于 LVL 库项目的名为“sample”的示例应用。该示例说明了应用如何使用库帮助程序类来检查和执行许可。

设置许可验证库

将 LVL 下载到您的计算机之后,您需要在开发环境中将其设置为 Android 库项目,或将库源代码直接复制(或导入)到您现有的应用软件包中。一般来说,我们建议将 LVL 用作库项目,因为它允许您跨多个应用重复使用许可代码,并且从长远来看更容易维护。请注意,LVL 不是单独编译的,而是作为静态 .jar 文件添加到应用中。

使用 LVL 的建议方法是将其设置为新的 Android 库项目。库项目是一种包含共享 Android 源代码和资源的开发项目。其他 Android 应用项目可以引用库项目,并且在构建时将其编译的源代码包含在自身的 .apk 文件中。对于许可,这意味着您可以在库项目中一次性完成大部分许可开发,然后将库源代码添加到各种应用项目中。通过这种方式,可以轻松地在所有项目中统一实现许可机制并集中维护。如果您不熟悉库项目或它们的使用方式,请参阅管理项目

LVL 是作为已配置的库项目提供的,下载后即可立即开始使用。

如果您使用的是 Android Studio,则需要将 LVL 作为新模块添加到项目中。

  1. 依次选择 File > New > Import Module,使用“Import Module from Source”窗口导入库模块。
  2. Import Module from Source 窗口的 Source directory 中,输入 LVL 的 library 目录(包含库的 AndroidManifest.xml 文件的目录)作为项目根目录 (<sdk>/extras/google/play_licensing/library/AndroidManifest.xml),然后选择 Next
  3. 选择 Finish 导入库模块。

如需详细了解如何在 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 管理中心提供配置工具,让您和其他人可以在应用发布之前对其进行许可测试。在实现许可机制时,您可以利用 Play 管理中心工具测试应用的政策,并处理不同的许可响应和错误情况。

许可测试环境的主要组成部分包括:

  • 发布商账号中的“测试响应”配置,用于设置在服务器对上传到发布商账号的应用进行许可检查时从登录发布商账号或测试账号的用户处返回的静态许可响应。
  • 一组可选的测试账号,在对已上传的应用进行许可检查时会收到静态测试响应(无论应用是否已发布)。
  • 应用的运行时环境,包含 Google Play 应用或 Google API 插件,用户在该环境中登录到发布商账号或其中一个测试账号。

正确设置测试环境的过程包括以下操作:

  1. 设置许可服务器返回的静态测试响应
  2. 根据需要设置测试账号
  3. 在启动许可检查测试之前,正确登录至模拟器或设备。

下文提供了详细信息。

设置许可检查的测试响应

Google Play 在发布商账号中提供了一项配置设置,允许您替换许可检查的正常处理流程并返回指定的静态响应代码。该设置仅适用于测试,且仅适用于对您已上传的应用进行许可检查,该许可检查由使用发布商账号或注册测试账号凭据登录到模拟器或设备的任何用户执行。对于其他用户,服务器始终按照常规规则处理许可检查。

如需为您的账号设置测试响应,请登录您的发布商账号,然后点击“编辑个人资料”。在“编辑个人资料”页面中,找到“许可”面板中的“测试响应”菜单,如下所示。您可以从一整套有效的服务器响应代码中进行选择,以控制要在应用中测试的响应或条件。

一般情况下,您应该确保使用“测试响应”菜单中提供的每个响应代码来测试应用的许可机制实现。有关这些代码的说明,请参阅许可参考中的服务器响应代码

图 2. 通过“账号详情”页面的“许可测试”面板,您可以设置测试账号并管理测试响应。

请注意,您配置的测试响应适用于整个账号,即不是应用于单个应用,而是应用于与发布商账号关联的全部应用。如果您同时测试多个应用,更改测试响应会影响所有这些应用的下次许可检查(如果用户使用发布商账号或测试账号登录到模拟器或设备)。

在成功接收许可检查的测试响应之前,必须先登录到安装了该应用且可从中查询服务器的设备或模拟器。具体来说,您必须使用自己的发布商账号或已设置的一个测试账号进行登录。有关测试账号的详情,请参阅下一部分。

请参阅服务器响应代码,查看可用测试响应及其含义的列表。

设置测试账号

在某些情况下,您可能想要允许多个开发者团队对最终将通过您的发布商账号发布的应用进行许可测试,但不允许他们访问您的发布商账号的登录凭据。为满足这一需求,Google Play 管理中心可让您设置一个或多个可选测试账号,授权其查询许可服务器并从发布商账号接收静态测试响应。

测试账号是一种标准 Google 账号,您在发布商账号中注册该账号,它们就会收到您已上传的应用的测试响应。然后,开发者可以使用测试账号凭据登录自己的设备或模拟器,并从已安装的应用中启动许可检查。当许可服务器收到测试账号用户的许可检查时,会返回为发布商账号配置的静态测试响应。

对于通过测试账号登录的用户,给予他们的访问权限和其他权限必定存在限制,其中包括:

  • 测试账号用户只能向许可服务器查询已上传到发布商账号的应用。
  • 测试账号用户没有权限将应用上传到发布商账号。
  • 测试账号用户没有权限设置发布商账号的静态测试响应。

下表总结了发布商账号、测试账号和任何其他账号在功能方面的差异。

表 1.用于测试许可的账号类型差异。

账号类型 是否可以在上传前检查许可? 是否可以接收测试响应? 是否可以设置测试响应?
发布商账号
测试账号
其他

在发布商账号中注册测试账号

如欲开始使用,您需要在发布商账号中注册每个测试账号。如图 2 所示,您在发布商账号的“编辑个人资料”页的“许可”面板中注册测试账号。只需以逗号分隔列表的方式输入账号,然后点击保存即可保存您的个人资料更改。

您可以使用任意 Google 账号作为测试账号。如果您想拥有并控制测试账号,可以自行创建账号,然后将凭据分发给您的开发者或测试人员。

为测试账号用户处理应用上传和分发

如上所述,测试账号用户只能针对上传到发布商账号的应用接收静态测试响应。由于这些用户没有权限上传应用,因此作为发布商,您需要与这些用户合作,收集应用进行上传并分发上传的应用进行测试。您可以通过任何方便的方式处理收集和分发事宜。

应用上传且许可服务器知道该应用之后,开发者和测试人员可以继续在本地开发环境中修改应用,而无需上传新版本。只有当本地应用递增清单文件中的 versionCode 属性时,您才需要上传新版本。

将您的公钥分发给测试账号用户

许可服务器会以正常方式处理静态测试响应,包括签署许可响应数据,添加额外项参数等。为支持使用测试账号而不是发布商账号实现许可机制的开发者,您需要将应用的许可公钥分发给他们。没有权限访问 Google Play 管理中心的开发者也没有权限访问应用的公钥,而在没有密钥的情况下,他们将无法验证许可响应。

请注意,如果您出于某种原因决定为应用生成新的许可密钥对,则需要通知测试账号的所有用户。对于测试人员,您可以将新密钥嵌入到应用软件包中,并将其分发给用户。对于开发者,您需要直接向他们分发新密钥。

在运行时环境中登录授权账号

许可服务旨在确定给定用户是否拥有使用给定应用的许可。在许可检查期间,Google Play 应用会从系统上的主账号收集用户 ID 并将其与应用软件包名称和其他信息一起发送到服务器。但是,如果没有用户信息,许可检查不会成功,因此 Google Play 应用会终止请求,并向应用返回错误。

在测试过程中,为了确保应用可以成功地查询许可服务器,您必须确保使用以下方式在设备或模拟器上登录账号:

  • 发布商账号的凭据,或
  • 已向发布商账号注册的测试账号的凭据

使用发布商账号登录有一个优点,它可让应用在上传到 Google Play 管理中心之前就收到静态测试响应。

如果您是某个大型组织的成员或正在与外部团队合作开发将通过您的网站发布的应用,您可能更希望分发测试账号,然后在测试期间使用测试账号登录。

如需在设备或模拟器上登录,请按以下步骤操作。首选方法是以主账号登录,但如果设备或模拟器上已有其他账号正在使用,您可以创建其他账号并使用发布商或测试账号凭据登录。

  1. 打开“设置”>“账号和同步”
  2. 选择添加账号,然后选择添加一个 Google 账号。
  3. 选择下一步,然后选择登录
  4. 输入发布商账号或在发布商账号中注册的测试账号的用户名和密码。
  5. 选择登录。系统会使您登录到新账号。

登录后,您就可以开始测试应用中的许可机制了(如果您已完成上述 LVL 集成步骤)。当您的应用启动许可检查时,它将收到一个响应,该响应包含发布者账号中配置的静态测试响应。

请注意,如果您使用的是模拟器,每次重新启动模拟器时擦除数据的情况下都需要登录发布商账号或测试账号。

完成设置步骤后,请继续将许可添加至您的应用