purchase play library google example billingclient app android in-app-billing

play - in app purchase android



onIabPurchaseFinished nunca llamado. (5)

Acabo de descubrir otra cosa importante: el requestCode que se utiliza para iniciar el flujo de compra tiene que ser> = 0.

utilicé "new Random (). nextInt ()" para generar un requestCode aleatorio, y algunas veces funcionó, otras veces no. ahora descubrí en la siguiente documentación, que requestCode no debe ser un número negativo:

http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29

He intentado configurar la facturación desde la aplicación de mi primera aplicación y he estado usando la sku de android.test.purchased. La compra se realiza, y logro incorporar el SKU a mi inventario, pero, como dice el título, onIabPurchaseFinished, nunca se llama.

Creo que puede tener algo que ver con este registro: "No se pudo guardar qué vista tiene foco porque la vista enfocada com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0 no tiene identificación". Aparece justo antes de ir a Google Play. Aunque no estoy seguro de lo que eso significa ...

Lanzamiento de compra:

mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");

Y el oyente:

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { @Override public void onIabPurchaseFinished(IabResult result, Purchase info) { System.out.println("Purchase Finish heard something"); if (result.isFailure()) { Log.d(TAG, "Error purchasing: " + result); return; } else{ Log.d(TAG,"Success!"); } } };


Debe invocar el vacío protegido en ActivityResult (); En su Actividad principal en lugar de MainActivity (Trivial Drive) desde donde llama a su actividad principal que es Trivial Drive Activity.

recibirá valores de código de resultado -1 si la compra es exitosa, de lo contrario 0.


Estaba enfrentando el mismo problema y la solución aceptada ya estaba implementada pero no pude decir qué estaba causando esto. Pasar a la nueva Biblioteca de Facturación de Google Play 1.0 (lanzada el 19 de septiembre de 2017) me solucionó el problema.

Espero que los siguientes enlaces ayuden a alguien que quiera implementar la nueva biblioteca:

Publicación de blog de Google sobre el lanzamiento

El video de youtube de Google

Biblioteca de entrenamiento Play Billing Class

Muestra Trivial Drive v2 de Google

Biblioteca de facturación de Play Library creada durante Google I / O 2017

Reproducir documentos de facturación de la biblioteca

Referencia oficial para clases y métodos

Publica notas


Intente agregar esto a la actividad que llama a mHelper.launchPurchaseFlow(..) :

@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."); } }


Tuve el mismo problema y tampoco se llamó a onActivityResult .
Inspirado por la respuesta de @Ghulam , me di cuenta de que la actividad en ActivityResult no llama automáticamente a los fragmentos en ActivityResult , así que tuve que hacerlo manualmente.

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(mCurrentFragment!= null){ mCurrentFragment.onActivityResult(requestCode, resultCode, data); } }