欢迎参加我们将于 6 月 3 日举行的 #Android11:Beta 版发布会

设置许可

在开始向应用添加许可验证机制之前,您需要设置 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 的运行/调试配置。

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

下载 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 管理中心提供配置工具,让您和其他人可以在应用发布之前对其进行许可测试。在实现许可时,您可以利用 Google 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 集成步骤)。当您的应用启动许可检查时,它将收到一个响应,该响应包含发布者帐号中配置的静态测试响应。

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

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