应用内计费和应用的无广告版本

In-app billing and ad-free version of application

我正在尝试在应用程序中实施应用内结算 (V3)。将要购买的项目将使该应用程序无广告。该商品为非消耗品。

我已经根据 Google 文档实现了代码,但我在理解 payload 参数时遇到了一些问题。我很困惑为什么最好将有效负载字符串存储在私人服务器上,如果是这样,它将如何将用户与购买绑定在一起。我想要的是,一旦用户购买了应用程序的无广告版本,他就可以在另一台设备上使用它(他使用的是他最初购买时使用的电子邮件)。如果我使用随机或空的负载字符串,用户是否可以在另一台设备上使用无广告版本?据我了解,购买信息保存在 Google 上,因此通常用户可以执行此操作。如果是这样,为什么将有效负载保存在另一台服务器(由我维护)上更好?这是来自 Google 文档的相关文本:

您应该传入一个字符串令牌,帮助您的应用程序识别进行购买的用户,以便您稍后可以验证这是该用户的合法购买。对于消耗品,您可以使用随机生成的字符串,但对于非消耗品,您应该使用唯一标识用户的字符串。 当您从 Google Play 返回响应时,请确保验证开发人员负载字符串是否与您之前随购买请求发送的令牌相匹配。作为进一步的安全预防措施,您应该在自己的安全服务器上执行验证。

以上是否意味着我应该使用用户的电子邮件地址作为负载字符串?如果是这种情况,验证将是购买过程返回的有效负载与用户的电子邮件相匹配。为什么要在安全服务器上执行此操作?

在阅读了更多相关帖子后,我得出以下结论conclusion/solution:

在使用购买时,我生成了一个随机的唯一字符串。我将此字符串保存在首选项中并将其用作有效负载。从 Google Play 获得响应后,我检查并确保负载与保存在首选项(或局部变量)中的负载匹配。在 activity 开始时,我只是检查 Google 服务器是否用户购买了特定商品 - 这里我不会使用有效负载,因为如果用户更换设备或重置应用程序,它将会丢失.

这对于非消耗品来说应该很有效——这不是最好的解决方案,但对于我来说,已经足够好了。最好的解决方案是生成一个随机字符串并将其与当前用户的电子邮件一起传递到一个私有的安全服务器以及 Google 服务器作为有效负载。这是,可以在购买后以及 Activity 开始时检查 Google 返回的有效负载,以验证用户购买是否有效。