onIabPurchaseFinished hiç aramadı.


111

İlk uygulamam için uygulama içi faturalandırmayı ayarlamaya çalışıyorum ve android.test.purchased sku'yu kullanıyorum. Satın alma işlemi gerçekleşir ve SKU'yu envanterime almayı başardım, ancak başlığın dediği gibi, onIabPurchaseFinished asla aranmaz.

Sanırım bu Günlük ile bir ilgisi olabilir: "Odaklanmış com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0 görünümünün kimliği olmadığı için hangi görünümün odaklandığı kaydedilemedi". Bu, Google Play'e gitmeden hemen önce açılır. Bunun ne anlama geldiğinden pek emin değilim ...

Satın alma işlemi başlatılıyor:

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

Ve Dinleyici:

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


    }
};

Bunu bir sekmeden yapmaya çalıştığımı eklemeliyim
AAAton

Kimliği programlı olarak ayarladım, ancak fark yok.
AAAton

Yanıtlar:


206

Bunu çağıran Aktiviteye eklemeyi deneyin 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
aynı sorun vardı ve bu mükemmel çalıştı. Ama bilmek istediğim şey, geri arama neden varsayılacağı gibi yerine getirilmiyor, neden bu çağrıyı kendimiz yapmalıyız? Geri aramayı işe yaramaz bir şekilde yapıyor: /
Örümcek

4
Bana da yardımcı oldu, teşekkürler. @Spider, Aktivitenizde bu yönteme ihtiyaç duymanızın nedeni, aksi takdirde mHelper'ın handleActivityResult () yönteminin çağrılmamasıdır. Başka bir deyişle, bu, Activity'de ihtiyaç duyulan gerçek / standart handleActivityResult () ve mHelper'ınki aslında sadece normal bir eski yöntemdir.
gcl1

8
Bunun için teşekkürler. Bu, dokümantasyondaki bir hatadır (buna ihtiyaç duyulduğundan veya IabHelper'da asla bahsetmezler. IabHelper'ın launchPurchaseFlow () özelliği, tamamlandığında etkinliğinizin onActivityResult () adını verecek olan startIntentSenderForResult'u çağırır.
Jerry Brady

3
Bunu bulduğumda sorunumu çözdüğümü düşündüm ... sonra bu işlevi zaten uyguladığımı fark ettim ve hala çalışmıyor ... ah
Matt K

3
Bir Fragment üzerindeActivityResult () '
un geçersiz kılınmasının


3

Aynı sorunu yaşadım ve onActivityResult da çağrılmadı.
Dan esinlenerek Ghulam cevabı @ i aktivitesi fark onActivityResult veridiliminin çağırmaz onActivityResult otomatik yüzden elle yapmak zorunda kaldı.

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

Benim durumumda, bu cevap işe yaradı, ancak ana etkinliğime ( github.com/onepf/OpenIAB/issues/166 )
PayToPwn

1

OnActivityResult () korumalı void çağırmanız gerekir; MainActivity (Trivial Drive) yerine ana Activity'de MainActivity yani Önemsiz Sürüş Aktivitenizi çağırdığınız yer.

eğer satın alma işlemi başarılı olursa -1 sonuç kodu değerlerini alacaksınız, aksi halde 0.


0

Aynı sorunla karşı karşıyaydım ve kabul edilen çözüm zaten uygulandı ancak buna neyin sebep olduğunu anlayamadım. Yeni Google Play Faturalandırma Kitaplığı 1.0'a (19 Eylül 2017'de yayınlandı) geçmek sorunu benim için çözdü!

Umarım aşağıdaki bağlantılar yeni kitaplığı uygulamak isteyenlere yardımcı olur:

Google'ın sürümle ilgili blog yayını

Google'ın youtube videosu

Fatura Kitaplığı Eğitim Sınıfını Oynatın

Google'ın Trivial Drive v2 Örneği

Google I / O 2017 sırasında yayınlanan Play Faturalandırma Kitaplığı kod laboratuvarı

Faturalandırma Kitaplığı Belgelerini Oynatın

Sınıflar ve yöntemler için resmi referans

Sürüm notları

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.