Подтвердить что ты не робот

In-App Billing v3 - Не обнаруживайте возврат

Я следил за обучением "In-App Billing v3" Google. Я получаю покупку предмета, но у меня проблема.

https://developer.android.com/training/in-app-billing/index.html

Я отменил и возвратил покупку, но приложение обнаружило покупку как правдивую. Я не могу продолжить тестирование своего приложения, потому что всегда обнаруживаю, что приобрел этот элемент.

Единственная ошибка, которую я обнаружил в logCat, следующая:

[3687] InAppBillingService.logResponseBundle: Bundle не содержит код ответа

Появляется после запуска mHelper.queryInventoryAsync(mGotInventoryListener).

Любая идея?

4b9b3361

Ответ 1

p.s. - это говорит о том, что требуется простое время для обновления средств.

http://code.google.com/p/marketbilling/issues/detail?id=88#makechanges

Но я не уверен - я понимаю, что они кэшируют данные о покупке на устройстве, но 24h - это долгое время...

Обновлено, добавив, что более 24 часов после того, как я отменил транзакции "тест", эти учетные записи по-прежнему лицензируются.

Обновлено снова - через 36 часов приложение было лицензировано STILL. Я удалил и переустановил, и он был лицензирован STILL.

Обновлено AGAIN! - я factory - reset устройство, вошедшее в систему, установило приложение, и оно было нелицензировано...

И еще одно обновление - ответ от Google предполагает, что возврат средств обрабатывается "автоматически", но может потребовать "до 72 часов" для обновления на устройстве - нет другого пути для обнаружения возврата, поэтому игроки получают до 3 дней "бесплатно", если они вернут - erm, ОК, это приложение In-App, а не App, но все же это кажется чрезмерным BIT?

Ответ 2

То, как я работаю, это блок кода, который игнорирует конкретные покупки, которые я сделал. У меня есть оператор журнала в коде, который распечатывает информацию о покупке, а затем я жестко задаю список в приложении PurchaseTimes для игнорирования. Это беспорядок, и я должен перекомпилировать каждый раз, когда хочу протестировать, но пока не нашел лучшего способа.

Ответ 3

После того, как вы ждали около 12 часов и попробовали все, что предлагалось здесь, и на аналогичных потоках, я все еще сталкивался с той же проблемой. Для меня это была следующая команда adb:

adb shell pm clear com.android.vending

Ответ 4

Вы можете легко отменить покупку для целей тестирования, потребляя этот элемент.

Используя пример Trivial Drive, я добавил следующий код в MainActivity.java, который будет "потреблять" премиальное обновление при запуске приложения:

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

        // dss added for test: Consume the premium upgrade for test purposes.
        boolean testConsume = true;
        if (mIsPremium && testConsume) {
            Log.d(TAG, "NOT FOR PRODUCTION: We have a premium upgrade. Consuming it.");
            mHelper.consumeAsync(inventory.getPurchase(SKU_PREMIUM), mConsumeFinishedListener);
            mIsPremium = false;
        } //dss end add

В качестве бонуса вы получаете свободный кварцевый газ, когда вы потребляете обновление только потому, что образец рассматривает все потребление как бензин в другом месте. Найдите MainActivity для "Provisioning", чтобы найти где.