tutorial test studio purchase pay library integrada facturacion compras app android listener in-app-billing

android - test - IabHelper PurchaseFinishedListener



pay app billing (4)

AndroidPenguin, tengo el mismo problema que usted, pero tengo el resultado de la actividad configurado correctamente y, sin embargo, mi comprador finalizado no se ejecuta.

Aquí está mi onActivityResult

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (SettingsManager.getBooleanSetting(rootId, "inapppurchase", false)){ Log.d(TAG, "take care of activity result with billing helper"); if (!mBillingService.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."); } } else super.onActivityResult(requestCode, resultCode, data); }

Si envío un intento de compra a través del estándar.

String mySku = "android.test.purchased"; mHelper.launchPurchaseFlow(this, mySku, 10001, mPurchaseFinishedListener);

Puedo comprar el artículo y se almacenará y puedo consultar el artículo y también funciona bien. Lo único que no funciona es el PurchaseFinishedListener. Lo tengo codificado casi idéntico a la aplicación de ejemplo, sin embargo, no parece que se llame en absoluto.

12-12 01:40:47.248: D/IabHelper(23502): Calling getPurchases with continuation token: null 12-12 01:40:50.116: D/IabHelper(23502): Starting async operation: launchPurchaseFlow

Estos son los dos últimos métodos a los que se llama y después de eso, cuando finalizo la compra, no se llama a la compra.

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new OnIabPurchaseFinishedListener() { @Override public void onIabPurchaseFinished(IabResult result, Purchase purchase) { Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); if (result.isFailure()) { complain("Error purchasing: " + result); // setWaitScreen(false); return; } if (purchase.getSku().equals(mySku)) { Log.d(TAG, "mySku is being consumed."); mHelper.consumeAsync(purchase, mConsumeFinishedListener); } Log.d(TAG, "Purchase successful."); new AsyncQuestionsActivity().doInBackground(); } };

Nada desde el log hasta el final funciona. ¿Hay algo de lo que me esté perdiendo?


Descubrí cómo arreglarlo. Implementar handleActivityResult en onActivityResult. Es necesario crear un puente entre el oyente y el flujo de compra iniciado.

A continuación se muestra el código que utilicé:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); // Pass on the activity result to the helper for handling if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { super.onActivityResult(requestCode, resultCode, data); } else { Log.d(TAG, "onActivityResult handled by IABUtil."); } }


En mi caso, está funcionando, intente así, espere hasta que el diálogo de Google Play se cierre por sí mismo. Luego, el oyente será llamado.


Para aquellos de ustedes que tuvieron el mismo problema que yo estaba experimentando ...

Acabo de hacer que mi variable miembro IabHelper sea estática, y eso solucionó el problema.

Ya había agregado el código de AndroidPenguin, y todavía tenía fallos de un IabHelper nulo, después de haber comprado un artículo (por lo que onActivityResult nunca tuvo la oportunidad de llamar handleActivityResult porque mHelper era nulo).