我遇到了麻烦。我按照在线教程进行设置并使用测试SKU进行测试。我刚刚在4周前安装了SDK,所以我没有使用超级过时的Google结算代码。我正在使用应用内结算的v3以及IABHelper内容。
当用户完成购买时,将调用IabHelper.OnIabPurchaseFinishedListener事件。在那里我检查IabResult是否失败,如果不是,我检查以确保SKU和开发人员有效负载是正确的。如果是我,那么我会尝试消费。
使用queryInventoryAsync我尝试获取已购买的商品。调用回调IabHelper.QueryInventoryFinishedListener并在那里再次检查IabResult是否失败。
如果它没有失败,我尝试使用consumeAsync来使用该项,然后该函数具有回调IabHelper.OnConsumeFinishedListener。在那里,我再次检查IabResult是否失败。如果不是,我打电话给我自己的服务器来完成订单。
显然我需要做更多的验证,因为我刚刚在大约一小时前发现了一个没有出现在Google电子钱包中的订单。我认为它现在会存在。我在Google自己的网站上找到了超过3个不同的说明/教程页面,用于设置结算版本3.其中一个表示验证签名,但实际上并没有说明如何执行此操作。当我创建IabHelper的实例时,我传入了我的base64公钥。 IabHelper没有验证签名?我是否必须使用自己的服务器与Google进行验证?我想弄清楚我错过了什么,所以我可以阻止进一步盗窃。
另外,当有人购买时,我是否应该通过电子邮件收到收据?出于好奇,因为我没有去过。
编辑:浏览IABHelper后,它正在验证签名。这个问题是否可以预期,并且了解订单是否真实的唯一方法是使用我自己的服务器进行验证?