android - para - facturas facil apk full
Excepción de facturación de Android (4)
Estoy probando mi facturación y obtuve esta excepción:
java.lang.IllegalStateException: Can''t start async operation (launchPurchaseFlow) because another async operation(launchPurchaseFlow) is in progress.
at utils.IabHelper.flagStartAsync(IabHelper.java:711)
at utils.IabHelper.launchPurchaseFlow(IabHelper.java:316)
at utils.IabHelper.launchPurchaseFlow(IabHelper.java:294)
at com.problemio.SubscribeIntroActivity$6.onClick(SubscribeIntroActivity.java:117)
at android.view.View.performClick(View.java:2532)
at android.view.View$PerformClick.run(View.java:9308)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4293)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Después de que ejecuté este código:
Button subscribe = (Button)findViewById(R.id.subscribe);
subscribe.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
// FIRST CHECK IF THE USER IS ALREADY A SUBSCRIBER.
mHelper.launchPurchaseFlow(SubscribeIntroActivity.this, SUBSCRIBE_SKU, RC_REQUEST, mPurchaseFinishedListener);
}
});
Pero antes de esto lo ejecuté como usuario de prueba y con el ID del producto de prueba, que era este: android.test.purchased y funcionó. Pero cuando cambié la identificación del producto a una de mis propias identificaciones de productos, se bloqueó con la excepción anterior.
¿Alguna idea de por qué sucedió eso? ¡Gracias!
En caso de que a alguien le falte el bosque para los árboles como yo ...
Recibí un seguimiento de la pila java.lang.IllegalStateException
en la Play Developer Console que no proporcionó mucho más que el mensaje de error ... así que me quedé perplejo.
¡Al principio no pude darme cuenta de cómo estaba sucediendo esto porque nunca pensé intentar tocar el botón que activa el IAB dos veces! (se ve deshabilitado después del primer toque debido a una superposición que deja de tocar, [a veces]).
Por lo tanto, asegúrese de que sus usuarios no puedan tocar el botón dos veces.
Está utilizando un código de muestra de google y en la línea de clase 793 de IabHelper hay este fragmento de código
if (mAsyncInProgress) throw new IllegalStateException("Can''t start async operation (" +
operation + ") because another async operation(" + mAsyncOperation + ") is in progress.");
y cuando realiza una compra por primera vez, ''mAsyncInProgress'' se hace realidad, y hasta que no haya consumido su compra, seguirá siendo cierta, por lo que necesita consumir su compra. Te recomiendo que leas todas las clases en el paquete util completamente, te ayudará.
Después de cualquier compra exitosa necesitas consumirla.
mHelper.consumeAsync(purchase, mConsumeFinishedListener)
pero a veces la solicitud de consumo falla, por lo que necesita manejar sus compras cada vez que se crea su actividad:
mHelper.queryInventoryAsync(mGotInventoryListener);
e intenta consumir tus compras en la devolución de llamada mGotInventoryListener.
IabHelper solo permitirá que se ejecute una sola consulta asíncrona a la vez. onActivityResult()
implementar onActivityResult()
y pasar los parámetros al método handleActivityResult()
del IabHelper.
El código de ejemplo de facturación en la aplicación implementa el método de esta manera:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
// not handled, so handle it ourselves (here''s where you''d
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(requestCode, resultCode, data);
}
else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
obtenga la última versión de la biblioteca aquí: https://code.google.com/p/marketbilling/source/browse/ donde solucionaron el problema