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

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

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

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

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

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

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

Любая идея?

4 ответа

Решение

PS - это предполагает, что это займет время, чтобы возмещение было обновлено

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

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

Обновлено, чтобы добавить, что через 24 часа после того, как я отменил "тестовые" транзакции, эти учетные записи все еще лицензированы!

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

Обновлен СНОВА! - Я сбросил настройки устройства, вошел в систему, установил приложение, и оно было нелицензионным...

И еще одно обновление - ответ от Google предполагает, что возвраты обрабатываются "автоматически", но для обновления на устройстве может потребоваться "до 72 часов" - другого способа определить возврат средств нет, поэтому игроки получают до 3 дней вещей ". бесплатно, если они возместят - ну, ладно, это In-App, а не покупка приложения, но все же, что кажется ЧИТАЛИМ чрезмерным?

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

adb shell pm очистить com.android.vending

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

Используя образец 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", чтобы найти, где.

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

Другие вопросы по тегам