当用户购买产品时,我使用网络服务来验证购买,以防止重放攻击,我将(nonce)开发者有效负载添加到购买中。 它按预期工作。
但是恢复交易怎么样? 我可以从本地清单中获取签名数据和签名以及其他所有信息(通过在IabHelper中调用queryPurchases()),但我无法在任何地方设置新的开发人员负载,因此我无法在我的Web服务上验证它。 / p>
如何安全地进行恢复交易?
非常感谢帮助...
编辑:我应该坚持使用iab v2来恢复交易吗?
答案 0 :(得分:1)
因此,据我所知,这是一个未解决的安全问题,会影响应用程序结算api v3的安全性。 在app app ai v3中无法安全地(通过网络服务验证)恢复购买。
答案 1 :(得分:0)
在撰写本文时,Google Play结算库示例App会在查询购买的商品时检索开发人员有效负载以进行验证。代码如下所示:
// Listener that's called when we finish querying the items and subscriptions we own
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Log.d(TAG, "Query inventory finished.");
.
.
.
// Do we have the premium upgrade?
Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM);
mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase));
Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
.
.
.
}