J'ai essayé de configurer la facturation intégrée à l'application pour ma première application et j'utilisais le sku Android.test.purchased. L'achat a abouti et j'ai réussi à insérer le SKU dans mon inventaire, mais, comme le titre le dit, onIabPurchaseFinished, n'est jamais appelé.
Je pense que cela a peut-être quelque chose à voir avec ce journal: "Impossible de sauvegarder la vue sélectionnée car la vue ciblée est com.Android.internal.policy.impl.PhoneWindow$DecorView@406743d0". Cela apparaît, juste avant de passer à Google Play. Je ne suis pas vraiment sûr de ce que cela signifie cependant ...
Achat de lancement:
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!");
}
}
};
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 non. Maintenant, j'ai découvert dans la documentation suivante que le requestCode ne devrait pas être un nombre négatif:
J'ai eu le même problème et le onActivityResult n'a pas été appelé non plus .
Inspiré de la réponse de @ Ghulam Je me suis rendu compte que l'activité onActivityResult n'appelle pas le onActivityResult du fragment automatiquement et que je devais donc 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);
}
}
Je faisais face au même problème et la solution acceptée était déjà mise en œuvre mais je ne pouvais pas dire ce qui le causait. Passer à la nouvelle Google Play Billing Library 1.0 _ (publié le 19 septembre 2017) a résolu le problème pour moi!
J'espère que les liens suivants aideront quelqu'un qui voudrait mettre en place la nouvelle bibliothèque:
Article de blog de Google sur la sortie
Classe de formation Play Billing Library
Exemple de lecteur trivial v2 de Google
Codelab de Play Billing Library publié lors de Google I/O 2017
Lire les documents de la bibliothèque de facturation
Vous devez appeler void protected onActivityResult (); Dans votre activité parent au lieu de MainActivity (Trivial Drive), vous appelez votre activité principale MainActivity comme activité Trivial Drive.
vous recevrez les valeurs de code de résultat -1 si l'achat aboutit, sinon 0.