play library google developer billingclient app android in-app-billing google-checkout

android - library - In-App Billing v3-No detectar reembolso



in app billing android (4)

Después de haber esperado aproximadamente 12 horas y haber probado todo lo sugerido aquí y en temas similares, todavía estaba enfrentando el mismo problema. Lo que hizo el truco para mí fue el siguiente comando adb:

adb shell pm claro com.android.vending

He seguido el entrenamiento sobre "In-App Billing v3" de Google. Tengo la oportunidad de comprar un artículo, pero tengo un problema.

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

He cancelado y reembolsado la compra, pero la aplicación detecta la compra como verdadera. No puedo seguir probando mi aplicación porque siempre detecto como compré el artículo.

El único error que he encontrado en logCat es el siguiente:

[3687] InAppBillingService.logResponseBundle: el paquete no contiene un código de respuesta

Aparece después de iniciar mHelper.queryInventoryAsync (mGotInventoryListener).

¿Alguna idea?


La forma en que estoy trabajando en ello es con un bloque de código que ignora las compras específicas que he realizado. Tengo una declaración de registro en el código que imprime la información de compra, luego codifico una lista en mi aplicación de purchaseTimes para ignorar. Es un desastre y tengo que volver a compilar cada vez que quiero probar, pero todavía no he encontrado una mejor manera.


Puede negar fácilmente la compra para fines de prueba al consumir el artículo.

Usando el ejemplo de Trivial Drive, agregué el siguiente código en MainActivity.java que "consumirá" la actualización premium cuando se inicie la aplicación:

// 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

Como beneficio adicional, obtiene un cuarto de tanque de gasolina gratuito cuando consume la actualización solo porque la muestra trata todo el consumo como gasolina en otro lugar. Busque MainActivity para "Provisioning" para encontrar dónde.


ps: esto sugiere que solo se necesita tiempo para actualizar el reembolso

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

Pero no estoy convencido: me doy cuenta de que están almacenando datos de compra en el dispositivo, pero las 24 horas es mucho tiempo ...

Actualizado para agregar que más de 24 horas después de que cancele las transacciones de ''prueba'', ¡esas cuentas aún tienen licencia!

Actualizada nuevamente - después de 36 horas, la aplicación aún tiene licencia. ¡Desinstalé y reinstalé y todavía tenía licencia!

Actualizado de nuevo! - Restablecí el dispositivo de fábrica, inicié sesión, instalé la aplicación y no tenía licencia ...

Y otra actualización: una respuesta de Google sugiere que los reembolsos se procesan ''automáticamente'' pero pueden demorar ''hasta 72 horas'' para que se actualicen en el dispositivo - no hay otra ruta para detectar un reembolso, por lo que los jugadores obtienen hasta 3 días de cosas '' gratis ''si se reembolsan - erm, OK, esto es In-App y no la compra de la aplicación, pero aún así, ¿parece un poco excesivo?