25

所以我想我理解了应用内计费和服务器端验证的工作原理,这要归功于我之前的问题的答案,但现在我想起来了,我仍然迷路了......

这就是我所拥有的,也是我想做的:

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

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

4

2 回答 2

45

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

我认为这是用于验证购买的 purchaseToken 和签名,但这样就无法验证购买的是商品 A 还是商品 B。

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

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

/Mr.Stupid 签字!

于 2013-04-19T15:22:06.040 回答
12

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

于 2013-11-19T11:24:44.733 回答