onIabPurchaseFinished non ha mai chiamato.


111

Ho provato a impostare la fatturazione in-app per la mia prima app e ho utilizzato lo sku android.test.purchased. L'acquisto è arrivato e riesco a inserire lo SKU nel mio inventario, ma, come dice il titolo, onIabPurchaseFinished, non viene mai chiamato.

Penso che possa avere qualcosa a che fare con questo registro: "Impossibile salvare quale vista ha il focus perché la vista focalizzata com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0 non ha ID". Viene visualizzato appena prima di andare su Google Play. Non sono proprio sicuro di cosa significhi però ...

Avvio dell'acquisto:

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

E l'ascoltatore:

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


    }
};

Forse dovrei aggiungere che sto cercando di farlo da una scheda
AAAton

Ho impostato l'id a livello di programmazione, ma nessuna differenza.
AAAton

Risposte:


206

Prova ad aggiungerlo all'attività che chiama 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.");
    }
}

16
ha avuto lo stesso problema e ha funzionato perfettamente. Ma quello che voglio sapere è perché la richiamata non viene eseguita come si potrebbe supporre, perché dobbiamo fare la chiamata a quella nostra auto? Un po 'rende inutile la richiamata: /
Spider

4
Mi ha anche aiutato, grazie. @Spider, il motivo per cui hai bisogno di questo metodo nella tua attività è che altrimenti il ​​metodo handleActivityResult () di mHelper non verrà chiamato. In altre parole, questo è il reale / standard handleActivityResult () necessario nell'attività, e mHelper è in realtà solo un vecchio metodo normale.
gcl1

8
Grazie per questo. È un bug nella documentazione (non menzionano mai la necessità di questo o in IabHelper. LaunchPurchaseFlow () di IabHelper richiama startIntentSenderForResult - che chiamerà onActivityResult () della tua attività quando è finito.
Jerry Brady

3
Pensavo di aver risolto il mio problema quando l'ho trovato ... poi mi sono reso conto di aver già implementato questa funzione e ancora non funziona ... sigh
Matt K

3
Nota che l'override di onActivityResult () su un frammento non funziona, deve essere eseguito su un'attività
cprcrack


3

Ho avuto lo stesso problema e non è stato chiamato neanche onActivityResult .
Ispirato dalla risposta di @ Ghulam mi sono reso conto che l'attività suActivityResult non chiama automaticamente onActivityResult del frammento, quindi ho dovuto farlo manualmente.

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

Nel mio caso, questa risposta ha funzionato, ma ho dovuto aggiungere un override OnActivityResult nella mia attività principale ( github.com/onepf/OpenIAB/issues/166 )
PayToPwn

1

Devi chiamare protected void onActivityResult (); Nella tua attività genitore invece di MainActivity (Trivial Drive) da dove stai chiamando la tua MainActivity che è Trivial Drive Activity.

riceverai valori del codice di risultato -1 se l'acquisto è andato a buon fine altrimenti 0.


0

Stavo affrontando lo stesso problema e la soluzione accettata era già implementata ma non riuscivo a capire quale fosse la causa. Il passaggio alla nuova libreria di fatturazione di Google Play 1.0 (rilasciata il 19 settembre 2017) ha risolto il problema per me!

Spero che i seguenti link aiuteranno qualcuno che vorrebbe implementare la nuova libreria:

Post del blog di Google sul rilascio

Il video di YouTube di Google

Gioca a Billing Library Training Class

Esempio di Trivial Drive v2 di Google

Play Billing Library codelab pubblicato durante Google I / O 2017

Riproduci Billing Library Docs

Riferimento ufficiale per classi e metodi

Rilascia note

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.