onIabPurchaseFinished jamais appelé.
J'ai essayé de configurer la facturation intégrée à l'application pour ma première application et j'ai utilisé android.test.achetés à l'unité. L'achat passe, et je parviens à obtenir le SKU dans mon inventaire, mais, comme le dit le titre, onIabPurchaseFinished, n'est jamais appelé.
Je pense que cela peut avoir quelque chose à voir avec ce journal: "impossible d'enregistrer quelle vue a le focus parce que la vue focalisée com.Android.interne.politique.impl.PhoneWindow $ DecorView@406743d0 n'a pas d'id". Pop-up, juste avant d'aller à de Google Play. Je ne suis pas vraiment sûr de ce que cela signifie cependant...
Lancement de l'achat:
mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");
Et L'auditeur:
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!");
}
}
};
5 réponses
Essayez d'ajouter ceci à l'activité qui appelle 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.");
}
}
Je viens de découvrir une autre chose importante: le requestCode utilisé pour lancer le flux d'achat doit être > = 0!
J'ai utilisé " new Random ().nextInt () " pour générer un requestCode aléatoire, et parfois cela fonctionnait, parfois ce n'était pas le cas. maintenant, j'ai découvert dans la documentation suivante, que le requestCode ne devrait pas être un nombre négatif:
J'étais confronté au même problème et la solution acceptée était déjà implémentée mais je ne pouvais pas dire ce qui causait cela. Passage à la nouvelle bibliothèque de facturation Google Play 1.0 (publié le 19 septembre 2017) correction du problème pour moi!
J'espère que les liens suivants aideront quelqu'un qui voudrait implémenter la nouvelle bibliothèque:
Le blog de Google sur la version
Lecture De La Bibliothèque De Facturation Cours De Formation
L'exemple Trivial Drive V2 de Google
Lire la bibliothèque de facturation codelab publié pendant Google I / O 2017
Lecture Des Documents De La Bibliothèque De Facturation
Vous devez appeler protected void onActivityResult (); dans votre activité parent au lieu de MainActivity (lecteur Trivial) d'où vous appelez votre MainActivity qui est une activité de lecteur Trivial.
Vous recevrez les valeurs resultcode -1 si l'achat réussit sinon 0.
J'ai eu le même problème et la onActivityResult n'a pas été appelé.
inspiré de la réponse de @Ghulam j'ai réalisé que l'activité onActivityResult n'appelle pas automatiquement le fragment onActivityResult donc je devais le faire
manuellement.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(mCurrentFragment!= null){
mCurrentFragment.onActivityResult(requestCode, resultCode, data);
}
}