Google Play 许可是一种基于网络的服务,允许应用查询受信任的 Google Play 许可服务器以确定当前设备用户是否已获得应用许可。许可服务基于 Google Play 许可服务器确定给定用户是否已获得使用给定应用许可的能力。Google Play 认为,如果用户是应用的已记录购买者,则用户已获得许可。
请求从您的应用向 Google Play 客户端应用托管的服务发起请求时开始。Google Play 应用随后向许可服务器发送请求并接收结果。Google Play 应用将结果发送到您的应用,您的应用可以根据需要允许或禁止进一步使用该应用。
注意:如果应用的某个版本位于封闭测试或公开测试轨道中,则所有被授权下载和安装该应用的用户都被视为该应用的已获得许可的用户。有关更多信息,请参阅 使用测试轨道从用户那里获得宝贵的早期反馈 。
注意:以前您可以通过上传未发布的“草稿”版本来测试应用。此功能不再受支持;您必须将其发布到封闭测试或公开测试轨道。有关更多信息,请参阅 草稿应用不再受支持 。
为了正确识别用户并确定许可状态,许可服务器需要有关应用和用户的信息 - 您的应用和 Google Play 客户端协同工作以组装信息,并且 Google Play 客户端将其传递给服务器。
为了帮助您在应用中添加许可,Android SDK 提供了一套可下载的库源代码,您可以将其包含在您的应用项目中:Google 市场许可包。许可验证库 (LVL) 是一个您可以添加到您的应用中的库,它处理与 Google Play 许可服务的所有许可相关通信。将 LVL 添加到您的应用后,您的应用可以通过简单地调用方法并实现接收状态响应的回调来确定当前用户的许可状态。
您的应用不会直接查询许可服务器,而是通过远程 IPC 调用 Google Play 客户端以发起许可请求。在许可请求中
- 您的应用提供:其包名称、一个稍后用于验证来自服务器的任何响应的随机数,以及一个用于异步返回响应的回调。
- Google Play 客户端会收集有关用户和设备的必要信息,例如设备的主要 Google 帐户用户名、IMSI 和其他信息。然后,它会代表您的应用程序向服务器发送许可证检查请求。
- Google Play 服务器会使用所有可用信息评估请求,尝试将用户的身份建立到足够的置信度。然后,服务器会根据您的应用程序的购买记录检查用户身份,并返回许可证响应,Google Play 客户端会通过 IPC 回调将该响应返回给您的应用程序。
您可以选择何时以及多长时间执行一次应用程序的许可证检查,并且您可以完全控制如何处理响应、验证签名的响应数据以及执行访问控制。
请注意,在许可证检查期间,您的应用程序不会管理任何网络连接或使用 Android 平台中的任何与许可证相关的 API。
许可证响应是安全的
为了确保每次许可证查询的完整性,服务器会使用 RSA 密钥对对许可证响应数据进行签名,该密钥对仅在 Google Play 服务器和您之间共享。
授权服务为每个应用程序生成一个授权密钥对,并在 Play 管理中心的应用程序 **服务和 API** 页面中公开公钥。您必须从 Play 管理中心复制公钥并将其嵌入到您的应用程序源代码中。服务器在内部保留私钥,并使用它来对使用该帐户发布的应用程序的许可证响应进行签名。
当您的应用程序收到签名的响应时,它会使用嵌入的公钥验证数据。在授权服务中使用公钥密码术使应用程序能够检测到被篡改或伪造的响应。
授权验证库
Android SDK 提供了一个可下载的包,称为 Google Market Licensing 包,其中包含授权验证库 (LVL)。LVL 极大地简化了将授权添加到应用程序的过程,并有助于确保应用程序的更安全、更强大的实现。LVL 提供内部类来处理大多数许可证查询的标准操作,例如联系 Google Play 客户端以发起许可证请求,以及验证和验证响应。它还公开接口,让您轻松地插入自定义代码以根据应用程序的需要定义授权策略和管理访问权限。主要的 LVL 接口是
策略
- 您的实现根据从服务器接收的许可证响应和任何其他可用数据(例如来自与您的应用程序关联的后端服务器的数据)来确定是否允许访问应用程序。该实现可以评估许可证响应的各个字段,并在需要时应用其他约束。该实现还允许您管理处理导致错误(例如网络错误)的许可证检查。
LicenseCheckerCallback
- 您的实现根据
Policy
对象对许可证响应的处理结果来管理应用程序的访问权限。您的实现可以以任何需要的方式管理访问权限,包括在 UI 中显示许可证结果或引导用户购买应用程序(如果当前没有许可证)。
为了帮助您开始使用 Policy
,LVL 提供了两种完整的 Policy
实现,您可以直接使用它们,也可以根据需要进行调整
ServerManagedPolicy
- 一个灵活的
Policy
,它使用授权服务器提供的设置来管理响应缓存和设备处于离线状态时的应用程序访问权限(例如当用户在飞机上时)。对于大多数应用程序,强烈建议使用ServerManagedPolicy
。 StrictPolicy
- 一个严格的
Policy
,它不会缓存任何响应数据,并且仅在服务器返回已授权响应时才允许应用程序访问。
LVL 作为 Android SDK 的可下载包提供。该包包括 LVL 本身以及一个示例应用程序,该应用程序演示了如何将库与您的应用程序集成,以及您的应用程序如何管理响应数据、UI 交互和错误条件。
LVL 源代码以 Android *库项目* 的形式提供,这意味着您可以维护一组库源代码,并在多个应用程序之间共享它们。SDK 还提供了完整的测试环境,因此您可以在发布应用程序之前开发和测试应用程序中的授权实现,即使您没有访问物理设备。
要求和限制
Google Play 授权旨在让您对通过 Google Play 发布的应用程序应用授权控制。该服务并非旨在让您控制对未通过 Google Play 发布的应用程序或在未提供 Google Play 客户端的设备上运行的应用程序的访问权限。
在应用程序中实施授权时,请记住以下几点
- 只有在主机设备上安装了 Google Play 客户端并且设备运行的是 Android 1.5(API 级别 3)或更高版本时,应用程序才能使用该服务。
- 要完成许可证检查,授权服务器必须可以通过网络访问。您可以实施许可证缓存行为来管理在没有网络连接时对应用程序的访问权限。
- 应用程序授权控制的安全性最终取决于您的实现本身的设计。该服务提供构建模块,使您可以安全地检查授权,但实际的授权执行和处理由您决定。通过遵循以下文档中的最佳实践,您可以帮助确保您的实现是安全的。
- 将授权添加到应用程序不会影响应用程序在未提供 Google Play 的设备上运行时的功能。
- 您可以为免费应用程序实施授权控制,但前提是您使用该服务来提供 APK 扩展文件。
复制保护的替代方案
Google Play 授权是一种灵活、安全的机制,用于控制对应用程序的访问权限。它有效地取代了以前在 Google Play 上提供的复制保护机制(不再支持),并为您提供了更广泛的应用程序分发潜力。
授权让您可以迁移到基于许可证的模型,该模型在所有能够访问 Google Play 的设备上都是可执行的。访问不受主机设备特性的限制,而是受 Google Play 上的应用程序(通过应用程序的公钥)和您定义的授权策略的限制。您的应用程序可以安装和管理在任何设备上的任何存储位置,包括 SD 卡。
虽然没有授权机制能够完全阻止所有未经授权的使用,但授权服务可以让您控制大多数正常使用类型在所有兼容设备(已锁定或未锁定)上的访问权限。
要开始将应用程序授权添加到您的应用程序,请继续访问 设置授权。