许可设置

在开始向应用程序添加许可证验证之前,您需要设置 Google Play 发布帐户、开发环境以及验证实现所需的任何测试帐户。

设置发布者帐户

如果您还没有 Google Play 的发布者帐户,则需要使用您的 Google 帐户注册一个帐户并同意 Google Play 服务条款。

有关更多信息,请参阅 发布入门

如果您已经在 Google Play 上拥有发布者帐户,请使用您的 Play Console 设置许可。

使用 Google Play Console,您可以

  • 获取用于许可的应用专用公钥
  • 在发布应用之前调试和测试应用的许可实现
  • 发布您已添加许可支持的应用

许可的管理设置

您可以在 Play Console 中管理 Google Play 许可的多个管理控制。这些控件允许您

  • 设置多个“测试帐户”,通过电子邮件地址识别。许可服务器允许设备或模拟器上登录测试帐户的用户发送许可检查并接收静态测试响应。您可以在 Play Console 的“帐户详细信息”页面中设置帐户。
  • 配置服务器在收到来自登录发布者帐户或测试帐户的用户对上传到发布者帐户的应用程序的许可检查时发送的静态测试响应。您可以在 Play Console 的“帐户详细信息”页面中设置测试响应。
  • 获取应用的许可公钥。在应用中实施许可时,必须将公钥字符串复制到应用中。您可以在“服务和 API”页面(在“所有应用”下)中获取应用的许可公钥。

图 1. 应用的许可密钥可在 Play Console 的“服务和 API”页面中找到。

有关如何使用测试帐户和静态测试响应的更多信息,请参阅下面的 设置测试环境

设置开发环境

为许可设置环境包括以下任务

  1. 设置运行时环境 以进行开发
  2. 将 LVL 下载 到您的 SDK 中
  3. 设置许可验证库
  4. 在您的应用程序中包含 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 服务。

要设置模拟器以将许可证添加到应用程序,请按照以下步骤操作

  1. 启动 Android SDK 管理器,可在 Android Studio 工具菜单(**工具 > Android > SDK 管理器**)下找到,或通过执行 <sdk>/tools/android sdk 来启动。
  2. 选择并下载您要定位的 Android 版本的Google APIs(必须为 Android 2.2 或更高版本)。
  3. 下载完成后,打开 AVD 管理器,可在 Android Studio 工具菜单(**工具 > Android > AVD 管理器**)下找到,或通过执行 <sdk>/tools/android avd 来启动。
  4. Android 虚拟设备管理器窗口中,选择+ 创建虚拟设备以设置新 AVD 的配置详细信息。
  5. 虚拟设备配置窗口中,选择设备硬件,然后选择下一步
  6. 选择Google API作为在新 AVD 上运行的系统映像,然后选择下一步
  7. 为 AVD 分配一个描述性名称,然后根据需要设置其他配置详细信息。
  8. 选择完成以创建新的 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 添加到您的项目中作为新的模块。

  1. 使用“从源导入模块”窗口通过选择文件 > 新建 > 导入模块来导入库模块。
  2. 从源导入模块窗口的源目录中,输入 LVL 的 library 目录(包含库的 AndroidManifest.xml 文件的目录)作为项目根目录(<sdk>/extras/google/play_licensing/library/AndroidManifest.xml),然后选择下一步
  3. 选择完成以导入库模块。

有关如何在 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 附加组件,用户已登录发布者帐户或其中一个测试帐户。

正确设置测试环境涉及

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

以下各节提供更多信息。

设置许可证检查的测试响应

Google Play 在您的发布者帐户中提供了一个配置设置,允许您覆盖许可证检查的正常处理并返回指定的静态响应代码。此设置仅用于测试,并且适用于您已上传的应用程序的许可证检查,由任何使用发布者帐户或已注册测试帐户的凭据登录到模拟器或设备的用户进行。对于其他用户,服务器始终根据正常规则处理许可证检查。

要为您的帐户设置测试响应,请登录您的发布者帐户并点击“编辑个人资料”。在“编辑个人资料”页面中,找到许可证面板中的“测试响应”菜单,如下所示。您可以从所有有效的服务器响应代码集中进行选择,以控制您要在应用程序中测试的响应或条件。

通常,您应该确保使用“测试响应”菜单中提供的每个响应代码测试应用程序的许可证实现。有关代码的描述,请参阅许可证参考中的服务器响应代码

图 2. 帐户详细信息页面上的“许可证测试”面板允许您设置测试帐户和管理测试响应。

请注意,您配置的测试响应适用于整个账户,也就是说,它不是应用于单个应用,而是应用于与发布者账户关联的所有应用。如果您同时测试多个应用,更改测试响应将在其下一次许可证检查时影响所有这些应用(如果用户使用发布者账户或测试账户登录到模拟器或设备)。

在您成功收到许可证检查的测试响应之前,必须登录到已安装应用并从中查询服务器的设备或模拟器。具体来说,您必须使用发布者账户或您设置的测试账户之一进行登录。有关测试账户的更多信息,请参阅下一节。

请参阅 服务器响应代码 以获取可用测试响应及其含义的列表。

设置测试账户

在某些情况下,您可能希望让多个开发团队测试最终将通过您的发布者账户发布的应用的许可,但又不想向他们提供发布者账户的登录凭据。为了满足这一需求,Google Play Console 允许您设置一个或多个可选的测试账户,这些账户被授权查询许可服务器并从您的发布者账户接收静态测试响应。

测试账户是您在发布者账户上注册的标准 Google 账户,以便它们将接收您已上传应用的测试响应。然后,开发人员可以使用测试账户凭据登录到其设备或模拟器,并从已安装的应用启动许可证检查。当许可服务器从测试账户用户那里收到许可证检查时,它将返回为发布者账户配置的静态测试响应。

必然地,通过测试账户登录的用户获得的访问权限和许可存在一些限制,包括

  • 测试账户用户只能查询已上传到发布者账户的应用的许可服务器。
  • 测试账户用户无权将应用上传到您的发布者账户。
  • 测试账户用户无权设置发布者账户的静态测试响应。

下表总结了发布者账户、测试账户和其他账户的功能差异。

表 1. 测试许可的账户类型差异。

账户类型 上传前可以检查许可证吗? 可以接收测试响应吗? 可以设置测试响应吗?
发布者账户
测试账户
其他

在发布者账户上注册测试账户

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

您可以使用任何 Google 账户作为测试账户。如果您想拥有和控制测试账户,您可以自己创建账户并将凭据分发给您的开发人员或测试人员。

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

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

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

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

许可服务器以正常方式处理静态测试响应,包括签名许可响应数据、添加额外参数等。为了支持使用测试账户而不是发布者账户实现许可的开发人员,您需要将应用的许可公钥分发给他们。无法访问 Play Console 的开发人员无法访问应用的公钥,如果没有密钥,他们将无法验证许可响应。

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

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

许可服务旨在确定给定用户是否有权使用给定应用 - 在许可证检查期间,Google Play 应用会从系统上的主账户收集用户 ID 并将其发送到服务器,以及应用的包名和其他信息。但是,如果无法获取用户信息,则许可证检查将无法成功,因此 Google Play 应用将终止请求并向应用返回错误。

在测试期间,为了确保您的应用能够成功查询许可服务器,您必须确保您已使用以下方法登录到设备或模拟器上的账户:

  • 发布者账户的凭据,或
  • 已在发布者账户中注册的测试账户的凭据

使用发布者账户登录的优点是允许您的应用即使在尚未上传到 Play Console 之前也能接收静态测试响应。

如果您属于大型组织或与外部团队合作开发将在您的网站上发布的应用,您更有可能希望分发测试账户,然后使用这些账户在测试期间登录。

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

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

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

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

完成设置过程后,请继续访问 向您的应用添加许可