Android в app billing v3, как безопасно восстановить покупки?


Когда пользователь покупает продукт, я использую веб-сервис для проверки покупки, чтобы защитить от атак повтора, я добавляю полезную нагрузку разработчика (nonce) к покупке. Он работает, как и ожидалось.

Но как насчет восстановления транзакций? Я могу получить подписанные данные и подпись, а также любую другую информацию из локального инвентаря (вызывая queryPurchases () в IabHelper), но я не могу установить новую полезную нагрузку разработчика нигде, поэтому я не могу проверить ее на своем веб-сервисе.

Как сделать восстановление сделки безопасно?

Помощь будет весьма признательна...

Edit: должен ли я просто придерживаться iab v2 для восстановления транзакций?

2 2

2 ответа:

Итак, насколько мне известно, это неразрешенная проблема безопасности, которая ставит под угрозу безопасность in app billing api v3. Нет никакого способа безопасно (проверка с помощью веб-сервиса) восстановить покупку в in app billing api v3.

На момент написания этой статьи пример приложения Google Play Billing Library извлекает полезную нагрузку разработчика для проверки при запросе приобретенных товаров. Код выглядит следующим образом:

// 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"));

        .
        .
        .
}