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


    }
};
110
demandé sur AAAton 2013-02-10 21:11:40

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.");
    }
}
200
répondu bugzy 2015-05-14 05:25:35

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:

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

8
répondu drwuro 2014-10-10 11:08:34

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

La vidéo youtube de Google

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

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

Notes de publication

0
répondu Mohit Singh 2018-01-29 12:42:34

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.

0
répondu Ghulam Qadir 2018-02-03 15:52:34

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);
        }
    }
0
répondu Abdelalim Hassouna 2018-04-09 14:53:38