onIabPurchaseFinished कभी नहीं बुलाया।


111

मैं अपने पहले ऐप के लिए इन-ऐप बिलिंग सेट करने की कोशिश कर रहा हूं, और android.test.purchased sku का उपयोग कर रहा हूं। खरीद के माध्यम से आते हैं, और मैं अपनी सूची में SKU प्राप्त करने का प्रबंधन करता हूं, लेकिन, जैसा कि शीर्षक कहता है, onIabPurchaseFinished, कभी नहीं कहा जाता है।

मुझे लगता है कि इस लॉग के साथ कुछ करना पड़ सकता है: "कौन सा दृश्य फोकस नहीं कर सकता क्योंकि फोकस दृश्य com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0 में कोई आईडी नहीं है"। यह Google Play पर जाने से ठीक पहले पॉप अप होता है। मुझे वास्तव में यकीन नहीं है कि इसका क्या मतलब है ...

लॉन्चिंग खरीद:

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

और श्रोता:

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


    }
};

मुझे शायद जोड़ना चाहिए कि मैं इसे एक टैब के भीतर से करने की कोशिश कर रहा हूं
AAAton

मैंने आईडी को प्रोग्रामेटिक रूप से सेट किया है, लेकिन कोई अंतर नहीं है।
AAAton

जवाबों:


206

कॉल करने वाली गतिविधि में इसे जोड़ने का प्रयास करें 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
एक ही मुद्दा था और यह सही काम किया। लेकिन मैं यह जानना चाहता हूं कि कॉल बैक क्यों निष्पादित नहीं होता है जैसे कि यह माना जाएगा कि हमें अपने स्वयं के लिए कॉल क्यों करना है? कॉलबैक को बेकार बनाता है: /
स्पाइडर

4
साथ ही मेरी मदद की, thx @Spider, आपकी गतिविधि में इस विधि की आवश्यकता का कारण यह है कि अन्यथा mHelper का हैंडलActivityResult () विधि नहीं कहा जाएगा। दूसरे शब्दों में, यह गतिविधि में आवश्यक वास्तविक / मानक संभालActivityResult () है, और mHelper है वास्तव में सिर्फ एक नियमित पुरानी विधि है।
gcl1

8
इसके लिए धन्यवाद। यह दस्तावेज़ में एक बग है (उन्होंने इस या IabHelper में कभी भी इसकी आवश्यकता का उल्लेख नहीं किया है। IabHelper का लॉन्चPurchaseFlow () startIntentSenderForResult को आमंत्रित करता है - जो आपकी गतिविधि को onActivityResult () के पूर्ण होने पर कॉल करेगा।
जेरी ब्रैडी

3
मुझे लगा कि मैंने अपनी समस्या हल कर ली है जब मैंने यह पाया ... तब मुझे एहसास हुआ कि मैंने पहले ही इस फ़ंक्शन को लागू कर दिया है और यह अभी भी काम नहीं करता है ... आह
मैट के

3
ध्यान दें कि एक फ्रैगमेंट पर onActivityResult () ओवरराइड करने से काम नहीं होता है, यह एक गतिविधि पर किया जाना चाहिए
cprcrack

8

मुझे अभी एक और महत्वपूर्ण बात पता चली है: खरीद प्रवाह शुरू करने के लिए उपयोग किया जाने वाला अनुरोध कोड> = 0 होना चाहिए!

मैंने एक यादृच्छिक अनुरोध उत्पन्न करने के लिए "नया रैंडम ()। नेक्स्टइंट ()" का उपयोग किया, और कभी-कभी यह काम किया, कभी-कभी ऐसा नहीं हुआ। अब मुझे निम्नलिखित दस्तावेज में पता चला, कि requestCode एक ऋणात्मक संख्या नहीं होनी चाहिए:

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


3

मैं एक ही मुद्दा था और onActivityResult या तो नहीं बुलाया गया था। @ गुलाम के जवाब
से प्रेरित होकर मैंने महसूस किया कि गतिविधि onActivityResult खंड के onActivityResult को स्वचालित रूप से कॉल नहीं करती है इसलिए मुझे इसे मैन्युअल रूप से करना पड़ा।

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

मेरे मामले में, इस उत्तर ने काम किया, लेकिन मुझे अपनी मुख्य गतिविधि ( github.com/onepf/OpenIAB/issues/166 ) में एक OnActivityResult ओवरराइड जोड़ना पड़ा
PayToPwn

1

आपको संरक्षित शून्य onActivityResult () कॉल करने की आवश्यकता है; MainActivity (Trivial Drive) के बजाय अपनी पैरेंट एक्टिविटी में जहां से आप अपनी MainActivity को ट्रिवियल ड्राइव एक्टिविटी कह रहे हैं।

यदि आपको परिणाम 0 प्राप्त हुआ है तो आप परिणाम मान -1 प्राप्त करेंगे अन्यथा 0।


0

मैं एक ही मुद्दे का सामना कर रहा था और स्वीकृत समाधान पहले से ही लागू था लेकिन यह नहीं बता सकता था कि यह क्या कारण था। नए Google Play बिलिंग लाइब्रेरी 1.0 में स्थानांतरण (19 सितंबर 2017 को जारी) मेरे लिए समस्या तय कर दिया!

मुझे आशा है कि लिंक का अनुसरण करने से किसी को नए पुस्तकालय को लागू करने में मदद मिलेगी:

Google का ब्लॉग रिलीज़ के बारे में पोस्ट करता है

गूगल का यूट्यूब वीडियो

बिलिंग लाइब्रेरी ट्रेनिंग क्लास खेलें

Google का सामान्य ड्राइव v2 नमूना

Google I / O 2017 के दौरान प्रकाशित बिलिंग लाइब्रेरी कोडलैब खेलें

बिलिंग लाइब्रेरी डॉक्स खेलें

कक्षाओं और विधियों के लिए आधिकारिक संदर्भ

नोट जारी करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.