Android在app billing v3中,如何安全恢复购买?

时间:2013-06-10 08:00:08

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

当用户购买产品时,我使用网络服务来验证购买,以防止重放攻击,我将(nonce)开发者有效负载添加到购买中。 它按预期工作。

但是恢复交易怎么样? 我可以从本地清单中获取签名数据和签名以及其他所有信息(通过在IabHelper中调用queryPurchases()),但我无法在任何地方设置新的开发人员负载,因此我无法在我的Web服务上验证它。 / p>

如何安全地进行恢复交易?

非常感谢帮助...

编辑:我应该坚持使用iab v2来恢复交易吗?

2 个答案:

答案 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"));

        .
        .
        .
}