web-dev-qa-db-fra.com

onIabPurchaseFinished jamais appelé.

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


    }
};
110
AAAton

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
bugzy

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:

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

8
drwuro

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

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

Vidéo youtube de Google

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

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

Notes de communiqués

0
Mohit Singh

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.

0
Ghulam Qadir