web-dev-qa-db-de.com

onIabPurchaseFinished rief nie an.

Ich habe versucht, die In-App-Abrechnung für meine erste App einzurichten, und habe die Android.test.purchased-Sku verwendet. Der Kauf ist abgeschlossen, und ich schaffe es, die SKU in mein Inventar zu bekommen, aber wie der Titel sagt, wird "onIabPurchaseFinished" nie genannt.

Ich denke, es könnte etwas mit diesem Protokoll zu tun haben: "Die Ansicht konnte nicht gespeichert werden, da die fokussierte Ansicht [email protected] keine ID hat". Das erscheint, bevor Sie zu Google Play wechseln. Ich bin mir nicht wirklich sicher, was das bedeutet ...

Kauf starten:

mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");

Und der Zuhörer:

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

Versuchen Sie, dies der Aktivität hinzuzufügen, die mHelper.launchPurchaseFlow(..) aufruft:

    @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

ich habe gerade eine andere wichtige Sache herausgefunden: Der RequestCode, der zum Starten des Einkaufsablaufs verwendet wird, muss> = 0 sein!

ich habe "new Random (). nextInt ()" verwendet, um einen zufälligen requestCode zu generieren, und manchmal hat es funktioniert, manchmal nicht. Nun habe ich in der folgenden Dokumentation herausgefunden, dass der RequestCode keine negative Zahl sein sollte:

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

8
drwuro

Ich hatte das gleiche Problem und das onActivityResult wurde auch nicht aufgerufen.
Inspiriert von @ Ghulams Antwort Ich erkannte, dass die Aktivität onActivityResult das onActivityResult des Fragments nicht automatisch aufruft, also musste ich es manuell.

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(mCurrentFragment!= null){
            mCurrentFragment.onActivityResult(requestCode, resultCode, data);
        }
    }
2

Ich war mit dem gleichen Problem konfrontiert und die akzeptierte Lösung war bereits implementiert, konnte jedoch nicht sagen, was dies verursacht hat. Der Umzug in die neue Google Play Billing Library 1.0 _ ​​(veröffentlicht am 19. September 2017) hat das Problem für mich behoben!

Ich hoffe, die folgenden Links helfen jemandem, der die neue Bibliothek implementieren möchte: 

Googles Blogbeitrag zur Veröffentlichung

Youtube-Video von Google

Play Billing Library Schulungskurs

Googles Trivial Drive v2-Beispiel

Play Billing Library-Codelab während Google I/O 2017 veröffentlicht

Abrechnungsbibliothek-Dokumente abspielen

Offizielle Referenz für Klassen und Methoden

veröffentlicht Notizen

0
Mohit Singh

Sie müssen protected void onActivityResult () aufrufen. In Ihrem Elternteil Activity statt MainActivity (Trivial Drive), von wo aus Sie Ihre MainActivity aufrufen, die Trivial Drive-Aktivität ist.

sie erhalten Ergebniscode-Werte -1, wenn der Kauf erfolgreich ist, andernfalls 0.

0
Ghulam Qadir