trivial studio play license library google developers billingclient app android in-app-billing

android - studio - IABHelper. queryInventoryAsync no devuelve compras, pero el flujo de producto de lanzamiento falla con "Elemento que ya es propietario"



install google play billing library (2)

Estoy seguro de que esa situación indica un error en su aplicación, pero a pesar de que el IAP de Google también es uno de los factores que causa el problema.

Considere tal situación: el usuario compra un artículo, lo está procesando en su servidor, luego la aplicación se bloquea antes de que el artículo se haya consumido. El usuario regresa a la aplicación, está intentando procesar el elemento una vez más, pero IAP devuelve el Inventory vacío (sin compras). El usuario hace clic en el artículo para comprar pero recibe ITEM_ALREADY_OWNED . Eso es extraño ?!

Así que no hay compra, pero el artículo ya es propiedad, ¿eh? Es seguro que hay algo con el almacenamiento en caché local en el lado de Google IAP, pero es su aplicación la que ha causado este problema (bloqueo de la aplicación). Puedes esperar horas pero en la mayoría de los casos esto no se resolverá solo .

Hay dos soluciones posibles. El primero es bueno para los desarrolladores, lo que borrará los datos de Google IAP.

adb shell pm clear com.android.vending

Después de unos segundos podrás comprar el artículo una vez más.

La segunda solución es mala, ya sea para desarrolladores o usuarios finales. Tienes que reiniciar el dispositivo. Después de un reinicio, espere entre 20 y 5 minutos y su artículo estará disponible para volver a comprarlo. Si se produce esta situación en el dispositivo de su cliente, pídale que borre los datos de Play Store manualmente de la configuración o que reinicie el dispositivo.

Recuerde que la causa raíz se bloquea en su aplicación, que se mete con el flujo de compra de IAP antes de que se consuma el elemento. Arreglarlo y el problema no volverá a ocurrir.

Estoy experimentando un problema intermitente con In App Billing Versión 3 usando IABHelper como lo proporciona Google.

Antes de iniciar una nueva compra, compruebo las compras no consumidas con queryInventoryAsync. Si lo encuentro, consumo cualquier compra no consumida y comienzo una nueva transacción, si no, voy directamente a iniciar una nueva transacción. El 99% del tiempo funciona bien.

Ocasionalmente, cuando queryInventoryAsync no devuelve compras no consumidas, el siguiente launchPurchaseFlow falla con Respuesta: 7: el artículo ya es propiedad.

INFO [IABHelper] Starting async operation: refresh inventory INFO [IABHelper] Querying owned items, item type: inapp INFO [IABHelper] Package name: jp.co.mycompany.myapp INFO [IABHelper] Calling getPurchases with continuation token: null INFO [IABHelper] Owned items response: 0 INFO [IABHelper] Continuation token: null INFO [IABHelper] Querying SKU details. INFO [IABHelper] queryPrices: nothing to do because there are no SKUs. INFO [IABHelper] Querying owned items, item type: subs INFO [IABHelper] Package name: jp.co.mycompany.myapp INFO [IABHelper] Calling getPurchases with continuation token: null INFO [IABHelper] Owned items response: 0 INFO [IABHelper] Continuation token: null INFO [IABHelper] Querying SKU details. INFO [IABHelper] queryPrices: nothing to do because there are no SKUs. INFO [IABHelper] Ending async operation: refresh inventory INFO [IABHelper] Constructing buy intent for jp.co.mycompany.myapp.myitem, item type: inapp INFO [IABHelper] Launching buy intent for jp.co.mycompany.myapp.myitem Request code: 1001 INFO [IABHelper] Ending async operation: launchPurchaseFlow INFO [IABHelper] Purchase canceled - Response: 7:Item Already Owned

queryInventoryAsync está diciendo que el usuario no posee el elemento, pero launchPurchaseFlow dice que el usuario sí lo tiene.

Extrañamente después de una espera (a veces unos minutos, a veces más) el problema se resuelve solo.

¿Alguien ha experimentado algo similar?

Para referencia, estoy usando la versión de IABHelper actualizada el 15 de marzo.


Limpie la caché de la aplicación Google Play Service en el móvil. Puede funcionar para usted.