onIabPurchaseFinished n’a jamais appelé.

J’ai essayé de configurer la facturation dans l’application pour ma première application et j’ai utilisé le sku android.test.purchased. L’achat arrive et j’arrive à faire entrer le SKU dans mon inventaire, mais, comme le titre l’indique, onIabPurchaseFinished n’est jamais appelé.

Je pense que cela peut avoir quelque chose à voir avec ce journal: “Impossible de sauvegarder quelle vue a le focus car la vue concentrée com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0 n’a pas d’identifiant”. Cela apparaît, juste avant d’aller à Google Play. Je ne suis pas vraiment sûr de ce que cela signifie si …

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

    Essayez d’append 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 stream d’achat doit être> = 0!

    J’ai utilisé “new Random (). nextInt ()” pour générer un requestCode aléatoire, et parfois cela fonctionnait, parfois pas. Maintenant, j’ai découvert dans la documentation suivante que le requestCode ne devait pas être un nombre négatif:

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

    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. Le passage au nouveau 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 implémenter la nouvelle bibliothèque:

    Le blog de Google sur la sortie

    Vidéo YouTube de Google

    Classe de formation Play Billing Library

    Exemple de Google Trivial Drive v2

    Play Codelab de Billing Library publié lors de Google I / O 2017

    Lire les documents de la bibliothèque de facturation

    Référence officielle pour les classes et les méthodes

    Notes de sortie

    Vous devez appeler void onActivityResult () protégé; Dans votre activité parente au lieu de MainActivity (Trivial Drive), vous appelez depuis votre MainActivity qui est Trivial Drive Activity.

    vous recevrez des valeurs de code de résultat -1 si l’achat a réussi autrement 0.

    J’ai eu le même problème et onActivityResult n’a pas été appelé non plus.
    Inspiré de la réponse de @ Ghulam, j’ai réalisé que l’activité onActivityResult n’appelle pas automatiquement le fragment onActivityResult du fragment, alors j’ai dû 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); } }