Google Play应用内结算版本3的服务器端validation(第2部分)

所以我想我明白了应用程序内计费和服务器端validation是如何工作的,这要归功于我以前的一个问题,但是现在我想到了,我仍然失去了…

这就是我所拥有的和我想要做的:

我有一个应用程序,用户可以购买几个“项目”。 每个项目都存储在一个服务器上,并且项目应该在购买时可以在应用程序中下载。 这些物品是只能购买一次的pipe理物品(即非消耗品)。 我在Google Play开发者控制台中定义项目没有任何问题,我可以成功购买。

我不明白的是如何让我的服务器不仅validation购买(使用purchaseToken和签名),但也知道它是项目X,而不是购买的项目Y? 是否有一些Google API可以让服务器与Google交谈,并询问某个purchaseToken属于哪个项目ID? 有没有其他的方法来做到这一点?

Solutions Collecting From Web of "Google Play应用内结算版本3的服务器端validation(第2部分)"

我讨厌回答我自己的问题,但嘿,别人没有! 我和我的同事今天早上再次看到这个问题。 对于我的问题的解决scheme终于在我看到TrivialDrive示例中客户端validation的工作方式之后。 男人,当我明白什么是错的时候,我是不是觉得自己戴上了“愚蠢的帽子”?

我以为这是purchaseToken和用于validation购买的签名,但这样就无法validation是否是购买的项目A或项目B.

如果您想在向买方提供内容之前进行服务器端validation(或任何types的validation),那么实际上是原始的JSON数据(如果使用IabHelper类,则会从Purchase类获得原始JSON)你应该和签名和公钥一起使用。 而且,由于它是传递给服务器的原始JSON数据,它还包含有关购买的所有信息(例如SKU id等)。

将开发人员负载设置为唯一标识用户(而不是设备!)的东西也很重要。 在我们的情况下,每个用户在服务器上都有一个帐户,我使用唯一的用户ID作为开发人员负载。

/M.Stupid签字!

自2013年6月起,您可以使用购买状态API和Google API客户端库,在服务器端直接使用Google Playvalidation购买。