Excepción: No se puede iniciar la operación asíncrona (actualizar el inventario) porque otra operación asíncrona (launchPurchaseFlow) está en curso
Sí, hay dos respuestas comunes a este problema:
Uno: Un hack donde se llama a billingHelper.flagEndAsync();
Antes de iniciar una operación asíncrona. Esto generalmente se considera como no recomendado, y no resuelve el problema en muchos casos.
- Prueba de facturación en la aplicación
- Implementación en compras de aplicaciones en Android?
- Google Wallet para productos digitales API vs Google Play Facturación en aplicaciones
- Google Play Store está dando créditos adicionales al usuario?
- ¿Qué utilizar como carga útil del desarrollador en las API de facturación de Google In-App?
Dos: Llamar el método handleActivityResult del handleActivityResult
en handleActivityResult
de la actividad. El problema con esta solución (además de no entender el propósito de este método) es que en mi aplicación las operaciones de facturación en la aplicación se realizan en la clase Application de la aplicación, porque hay un montón de actividades en la aplicación donde un usuario puede activar Una compra en la aplicación y múltiples posibles puntos de entrada donde la aplicación necesita consultar el inventario de compras en la aplicación. Así que traté de poner:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (!MyApplication.myAppInstance.mHelper.handleActivityResult(requestCode, resultCode, data)) super.onActivityResult(requestCode, resultCode, data); }
En cada actividad donde un usuario podría iniciar una compra, pero esto no ha resuelto los accidentes. Realmente no entiendo el propósito de este material de OnActivityResult, así que probablemente no entendí cómo se supone que se implementará. ¿Por qué Google quiere forzarme a hacer operaciones de facturación en la aplicación de una actividad de todos modos?
- Falla de confiabilidad de la aplicación en la aplicación v3
- En cuestión de compra de aplicaciones en android
- Estado de prueba gratuita de suscripción de IAB
- Compruebe el estado de compra de Android pero devuelva el token de compra no se encontró
- ¿Cómo podría comprobar mediante programación si el usuario que está tratando de comprar en el elemento de facturación de la aplicación es su editor?
- Android IAP - ¿Dónde están los IAP almacenados en el dispositivo?
- Cambiar el precio del elemento de compra en la aplicación después de publicar android
- ¿Es posible tener múltiples apoyos de APK basados en el país?
Tuve un problema similar. Desafortunadamente el código IabHelper
no es genial … es en su mayoría bueno, pero el modelo de subprocesos es un poco desordenado, lo que significa que puede llegar a ser confuso cómo manejar correctamente los casos de borde.
Una manera fácil de deshacerse de los accidentes es simplemente envolver la llamada al método con un cheque if-statement como:
if (!mHelper.isAsyncInProgress()) { mHelper.launchPurchaseFlow(...); }
Una mejor solución sería reescribir el código IabHelper
desde cero … pero en este caso en particular la excepción ocurre tan rara vez que probablemente no vale la pena. Lamentablemente no hay una solución fácil en este caso … el código de ejemplo IabHelper
no es el más grande y la mayoría de nosotros sólo decidirá vivir con él.
Tener una bandera para lanzarPurchaseFlow ignora varios lanzamientos de flujo de compra. Pero, por desgracia, esto falla si el usuario hace clic en el botón Atrás por error de Google In App Billing serviceIntent. Bandera debe restablecerse a false en este caso. De lo contrario, el usuario no podrá intentar comprar de nuevo.
if(!mHelper.isAsyncInProgress()) { mHelper.launchPurchaseFlow(...); } // Invoke below method to reset onBackPressed public static void resetAsyncInProgress() { mHelper.setAsyncInProgress(false); }
- ¿Cómo cierro AlertDialog cuando hago clic en el elemento ListView
- Fragmento de mapa no se pudo modificar después de la recarga de fragmento