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:
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
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
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);
}
}