购买Google Play应用内结算第3版的服务器端验证(第2部分)

时间:2013-04-18 20:03:12

标签: android in-app-purchase in-app-billing

所以我认为我理解了应用内结算和服务器端验证是如何工作的,这要归功于对previous question of mine的回答,但现在我想起来我仍然迷失了......

这就是我拥有的和我想做的事情:

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

我不明白的是我如何让我的服务器不仅验证购买(使用purchaseToken和签名),还知道它是项目X而不是购买的项目Y?是否有一些Google API,服务器可以与Google通信并询问某个purchaseToken属于哪个商品ID?还有其他方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:42)

我不想回答我自己的问题,但是,嘿,没有人做过!我和我的同事们今天早上又重新审视了这个问题。在我再次了解TrivialDrive示例中客户端验证的工作原理后,我终于想到了解决问题的方法。伙计,当我明白什么是错的时候,我是否想戴上我的“愚蠢帽子”。

我认为是buyToken和用于验证购买的签名,但是这样就无法验证是否是购买的商品A或商品B.

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

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

/Mr.Stupid签约!

答案 1 :(得分:12)

自2013年6月起,您可以使用Purchase Status APIGoogle APIs Client Libraries在服务器端直接通过Google Play验证购买。