Actualmente estoy probando la facturación integrada en la aplicación para una aplicación futura y, después de "comprar" correctamente el elemento de prueba "android.test.purchased" la primera vez, ahora recibo el código de respuesta 7 cada vez que intento comprarlo de nuevo. lo que significa que ya tengo este artículo.
12-15 23: 02: 14.149: E / IabHelper (19829): Error de facturación en la aplicación: No se puede comprar el artículo, Respuesta de error: 7: El artículo ya es de su propiedad
Por lo que tengo entendido, se supone que esta compra siempre es posible, ¿verdad? ¿Para que el desarrollador pueda probar su aplicación?
Si no es así, ¿cómo puedo "restablecer" su estado a no poseído? Estoy usando el paquete util de la muestra de facturación integrada en la aplicación de Google.
fuente
Respuestas:
Agregue este código a un hilo para iniciar la solicitud de consumo.
Aquí para la prueba de compra, purchaseToken es
Y
entonces el consumo es exitoso.
Tampoco olvide hacer público mService en
entonces sería posible acceder así:
fuente
No es necesario escribir ningún código de consumo especial. Simplemente use el comando adb para borrar los datos de Google Play Store:
fuente
Resulta que el elemento android.test.purchased se comporta como una identificación normal. Significa que si quieres poder comprarlo nuevamente, debes consumirlo en algún lugar de tu código. Creo que la documentación de Google es engañosa sobre este asunto, y que deberían agregar otra identificación estática que puede comprar sin cesar con fines de prueba.
fuente
billingClient.queryPurchases()
no devuelve ese elemento no consumido, por lo que ahora no puedo consumir elemento porque no puedo obtenerpurchaseToken
de ellaVersión 3 en la aplicación:
fuente
Versión 3: la forma más rápida de resolver : borrar el caché de Google Play Store permitirá que "android.test.purchased" esté disponible nuevamente.
fuente
utilicé adb shell:
fuente
Así es como podemos consumir el Item
fuente
android.test.purchase
en algún momento lo que estaba causando problemas, la tarea de inventario en la facturación en la aplicación arrojó una gran cantidad de errores y nunca terminó. Ejecutar esto como algo único lo borró para poder reanudar el uso de mi SKU real y continuar como estaba antes. GraciasEn mi opinión, si su programa no está diseñado para consumir el artículo, no necesita modificar el código para borrar la memoria de un proveedor externo. Esto hará que su código sea más frágil y luego tendrá que dedicar mucho tiempo a agregar y eliminar código que no pertenece a su software, por lo que es un mal diseño implementar una solución como esa.
La mejor solución que funcionó para mí para borrar android.test.purchased fue
y entonces
No necesitaba limpiar el efectivo y navegar por la configuración de mis aplicaciones o cambiar el código para eso. Necesitaba agregar el adb a las variables de ruta del sistema de Windows, lo cual era bastante sencillo. Entonces, sí, debe usar adb, que probablemente necesite de todos modos, así que ...
Simplemente agregue su C: \ ... \ android-sdk \ platform-tools; en la ruta de Windows en las variables de entorno, e imagino que también es bastante simple en Mac y Linux. Espero que ayude a alguien a pasar unos días menos implementando Android en la facturación de la aplicación.
fuente
uninstall
no es necesario borrar el sku android.test.purchased .El problema principal es que tienes que consumir
android.test.purchased
artículo. Pero este artículo no estará disponible en su inventario de consultas, por lo que no puede consumir usando el flujo normal.Entonces, si está usando IabHelper, en
IabHelper
clase, puede cambiar temporalmente elIInAppBillingService
mService a público para que sea accesible desde su IabHelper.Luego, en tu clase, puedes consumir así,
Si tiene éxito, la respuesta será 0.
Espero que esto ayude.
fuente
consumeAsync()
a android.test.purchased . No hay problema con eso.Para propósitos de prueba, también le sugiero que inserte un fragmento de código que borrará todos los productos que ha comprado antes de llamar a un método que inicializa el flujo de compra de gp. Eso es especialmente cómodo cuando prueba solo un elemento en este momento. Por ejemplo, así:
fuente
vaya a la consola de Google Play y abra la pestaña Gestión de pedidos. Allí puede reembolsar / cancelar compras de prueba.
fuente
Si está en un entorno de prueba
1) En el caso de android.test.purchased, puedo restablecer el pago falso reiniciando el dispositivo Android (consumió el inventario).
2) En InApp util hay un archivo llamado Security.java, hazlo como sigue, por temporal. Dado que el pago de prueba (falso) siempre devuelve falso debido a una excepción de seguridad.
Luego, en su OnIabPurchaseFinishedListener, llame a fechInvForconsumeItem ()
El fechInvForconsumeItem () es
Consume Listener es
fuente
fuente
En mi caso, parece que Google no registra una compra del artículo. Más bien, la copia local de Google Play Services almacena en caché la compra. De esa forma, cuando se realiza una segunda solicitud en el mismo dispositivo,
android.test.purchased already owned
aparece. Sin embargo, usar otro dispositivo o restablecer el dispositivo borra la caché y permite que se repita la compra.fuente
En mi caso, solo necesitaba borrar el caché de las aplicaciones. Después de borrar la caché, pude iniciar el flujo de compra nuevamente.
Desde mi dispositivo (4.4.2), navegué a "Configuración-> Administrador de aplicaciones". A continuación, seleccioné la aplicación de la pestaña "DESCARGADO" y luego "Borrar caché".
fuente
Ésta es la diferencia entre artículos consumibles y no consumibles; Los artículos no consumibles (con lo que parece estar lidiando aquí) tienen su estado registrado de manera persistente, mientras que los artículos consumibles se pueden comprar varias veces. Tendrás que ir a tu consola de administración de Play y cancelar / reembolsar la venta para probarla nuevamente.
fuente