Google Play 许可是一种基于网络的服务,允许应用程序查询受信任的 Google Play 许可服务器以确定该应用程序是否已许可给当前设备用户。许可服务基于 Google Play 许可服务器确定给定用户是否已获许可使用给定应用程序的功能。如果用户是应用程序的已记录购买者,则 Google Play 会认为该用户已获得许可。
当您的应用程序向 Google Play 客户端应用程序托管的服务发出请求时,请求开始。然后,Google Play 应用程序向许可服务器发送请求并接收结果。Google Play 应用程序将结果发送到您的应用程序,您的应用程序可以根据需要允许或不允许进一步使用该应用程序。
注意:如果应用的版本位于封闭或公开测试轨道中,则所有有权下载和安装该应用的用户都被视为该应用的许可用户。有关更多信息,请参阅使用测试轨道从用户那里获得宝贵的早期反馈。
注意:以前您可以通过上传未发布的“草稿”版本来测试应用。此功能不再受支持;您必须将其发布到封闭或公开测试轨道。有关更多信息,请参阅不再支持草稿应用。
为了正确识别用户并确定许可状态,许可服务器需要有关应用程序和用户的信息——您的应用程序和 Google Play 客户端共同汇集信息,并且 Google Play 客户端将其传递给服务器。
为了帮助您向应用程序添加许可,Android SDK 提供了一组可下载的库源代码,您可以将其包含在您的应用程序项目中:Google Market Licensing 软件包。许可验证库 (LVL) 是您可以添加到应用程序中的库,它处理与 Google Play 许可服务的所有许可相关通信。将 LVL 添加到您的应用程序后,您的应用程序只需调用一个方法并实现接收状态响应的回调即可确定其针对当前用户的许可状态。
您的应用程序不会直接查询许可服务器,而是通过远程 IPC 调用 Google Play 客户端来启动许可请求。在许可请求中
- 您的应用程序提供:其包名、稍后用于验证来自服务器的任何响应的随机数以及可以异步返回响应的回调。
- Google Play客户端会收集关于用户和设备的必要信息,例如设备的主要Google帐户用户名、IMSI和其他信息。然后,它会代表您的应用程序向服务器发送许可证检查请求。
- Google Play服务器使用所有可用信息评估请求,尝试将用户的身份建立到足够的置信度级别。然后,服务器会根据您的应用程序的购买记录检查用户身份,并返回许可证响应,Google Play客户端会通过IPC回调将其返回到您的应用程序。
您可以选择何时以及多久检查一次应用程序的许可证,并且您可以完全控制如何处理响应、验证签名的响应数据以及执行访问控制。
请注意,在许可证检查期间,您的应用程序不会管理任何网络连接或使用Android平台中任何与许可相关的API。
许可证响应是安全的
为确保每个许可证查询的完整性,服务器使用在Google Play服务器和您之间独享的RSA密钥对对许可证响应数据进行签名。
许可服务为每个应用程序生成一个许可密钥对,并在Play控制台的应用程序**服务和API**页面中公开公钥。您必须从Play控制台复制公钥并将其嵌入到您的应用程序源代码中。服务器在内部保留私钥,并使用它来为使用该帐户发布的应用程序签名许可证响应。
当您的应用程序收到签名响应时,它使用嵌入的公钥来验证数据。许可服务中公钥密码的使用使应用程序能够检测到被篡改或被伪造的响应。
许可验证库
Android SDK提供了一个可下载的包,称为Google Market许可包,其中包含许可验证库(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卡。
虽然没有任何许可机制可以完全防止所有未经授权的使用,但许可服务允许您控制大多数正常使用类型的访问,涵盖所有兼容设备,无论是锁定的还是未锁定的。
要开始向您的应用程序添加应用程序许可,请继续访问设置许可。