2014-10-03 8 views
5

मैं थोड़ी देर के लिए एंड्रॉइड आईएबी v3 के साथ संघर्ष कर रहा हूं। मैं अपने परीक्षण उपकरणों पर लगातार काम कर रहा हूं। हालांकि, मेरी क्रैश रिपोर्टिंग सेवा दो पुनरावर्ती दुर्घटनाओं को दिखाती है: एक शून्य सूचक अपवाद के लिए और एक अवैध राज्य अपवाद के लिए। मैंने स्टैकओवरफ्लो उपयोगकर्ताओं से समान समस्याओं का सामना करने वाले Google नमूना कोड w/कई सुझावों को अपडेट करने का प्रयास किया है। मैं "क्रैश रिपोर्ट पढ़ें, अनुसंधान करें, क्रैश को ठीक करने का प्रयास करें, अद्यतन सबमिट करें, फिर से एक ही क्रैश रिपोर्ट देखें" चक्र कुछ बार चला गया है। मुझे लगता है कि यह एक अलग दृष्टिकोण के लिए समय है।वर्तमान एंड्रॉइड आईएबी संदर्भ

यदि आप आज एंड्रॉइड आईएबी से शुरू कर रहे थे, तो आप कोड नमूने, फिक्स, दस्तावेज इत्यादि के लिए सबसे अद्यतित, सही संसाधन के रूप में क्या चुनेंगे?

यह एक ही संसाधन नहीं होना चाहिए। नमूना कोड का कोई भी संयोजन, एसओ पोस्ट, ब्लॉग पोस्ट, या यहां तक ​​कि "एंड्रॉइड एसडीके प्रबंधक के साथ अपडेट" से पैच सहायक होंगे। आदर्श रूप से, हम आईएबी के लिए नए लोगों के लिए संसाधन बना सकते हैं जो उन्हें सिरदर्द से बचाता है और सेवा को एकीकृत करने की कोशिश कर रहा है।


संपादित 1: दुर्घटनाओं

java.lang.IllegalStateException: Can't start async operation (refresh inventory) because another async operation(launchPurchaseFlow) is in progress. 
    at com.android.vending.billing.IabHelper.flagStartAsync(IabHelper.java:832) 
    at com.android.vending.billing.IabHelper.queryInventoryAsync(IabHelper.java:623) 
    at com.android.vending.billing.IabHelper.queryInventoryAsync(IabHelper.java:651) 
    ... 


java.lang.NullPointerException 
    at com.android.vending.billing.IabHelper.launchPurchaseFlow(IabHelper.java:398) 
    at com.android.vending.billing.IabHelper.launchPurchaseFlow(IabHelper.java:350) 
    ... 

उन पर अधिक जानकारी दो अपवाद हैं। वे हमेशा IabHelper में एक ही स्थान पर नहीं होते हैं। मैं शायद उन्हें सिर्फ पैच कर सकता हूं, लेकिन यह इस समस्या को हल करने का सही तरीका नहीं लगता है। इसके अलावा, यह किसी और की मदद नहीं करता है।

यह संभव है कि मैं Google के आउट-डेटेड नमूना कोड फॉर्म का उपयोग कर रहा हूं। हालांकि, मैंने काफी खोज की है और हाल ही में कुछ भी नहीं मिला।

+1

मैं निश्चित रूप से आपका विचार दूसरा स्थान देता हूं। ऊपर वर्णित उन दो दुर्घटनाओं के बारे में अधिक जानकारी प्राप्त करना भी बहुत अच्छा होगा। –

+1

SO ऐसे प्रश्न के लिए जगह नहीं है, यह [ऑफ विषय] है (http://stackoverflow.com/help/on-topic) और कहीं और पूछा जाना चाहिए।इस तरह के संसाधन के लिए निश्चित रूप से एक अच्छा विचार है, यह सिर्फ जगह नहीं है। – MByD

+1

@ एमबीडीडी स्टैक ओवरफ्लो अक्सर कई डेवलपर्स द्वारा एनाइड आईएबी v3 के साथ परेशानी होती है। इसलिए, मुझे लगता है कि यह इस प्रश्न के लिए आदर्श जगह है। – SundayMonday

उत्तर

6

अरे मैं 10 दिनों से इनपैच खरीद पर भी काम कर रहा हूं और मैंने सफलतापूर्वक एकीकृत किया है मेरा मौजूदा ऐप और इसे लाइव बनाने के लिए तैयार है। प्रारंभ में जब मैंने ऐसा करना शुरू कर दिया था तो मैंने Google InApp डाउनलोड किया है बिलिंग उदाहरण को here से "ट्रिविअल ड्राइव" कहा जाता है।

लेकिन इससे मुझे बहुत मदद नहीं मिली क्योंकि इसमें बहुत सारे मुद्दे और बग हैं, इसलिए मैंने नए वी 3 एपीआई का उपयोग करके स्क्रैच से अपने आप इसे करने का फैसला किया है, जिसे आप here पा सकते हैं। इस ट्यूटोरियल में स्पष्ट स्पष्टीकरण है जो आपकी मदद करेगा और यदि आपके पास समय है this यूट्यूब वीडियो जहां Google कर्मचारी ने स्पष्ट रूप से समझाया था कि इसे कैसे एकीकृत किया जाए।

यदि आप त्वरित उदाहरण चाहते हैं, तो मेरे पास एक नमूना ऐप है जिसे आप here से डाउनलोड कर सकते हैं। यह पूछने के लिए स्वतंत्र महसूस करें कि आपके कोई प्रश्न हैं या नहीं।

1

आप शायद एसिंक ऑपरेशंस का उपयोग कर रहे हैं। यदि आप ... async विधियों का उपयोग करते हैं तो वर्तमान IabHelper सुरक्षित नहीं है। समस्या यह है कि किसी भी पल में एक एसिंक ऑपरेशन चल रहा है निपटान मुख्य थ्रेड पर कॉल किया जा सकता है। इस मामले में आपको NullPointerExceptions और IllegalStateExceptions मिलेगा।

इस क्लोन studiozanandroid

रेफरी इस Ans, download the patch here async त्रुटियों से बचने के साथ

साथ प्रयास करें।

अन्य इस चेकआउट की तुलना में इस pay me lib में की तरह हस्ताक्षर सत्यापन संबंधी समस्याएं, OpenIAB libs उपयोग करने के लिए प्रयास करें।

-1

जो भी आप करते हैं IabHelper का उपयोग न करें। यह ऐप बिलिंग के पिछले संस्करणों से बचे हुए है। यह संस्करण 3 के साथ जरूरी नहीं है क्योंकि यह एक और परत पेश करता है और छोटी है।

आधिकारिक दस्तावेज़ों - implementing in app billing में दिखाए गए अनुसार बस आगे बढ़ें और बिलिंग लागू करें।

एपीआई के वी 3 में मूल रूप से केवल तीन विधियां हैं और इसे लागू करने के लिए बहुत सरल है। यदि आप इन-ऐप-बिलिंग के बारे में गंभीर हैं तो आपको यह समझना होगा कि यह प्रक्रिया किसी भी तरह से कैसे काम करती है, कोई पुस्तकालय या सहायक आपके साथ आपकी सहायता करने जा रहा है।

+2

आपके द्वारा संदर्भित आधिकारिक दस्तावेज़ IabHelper का भी उपयोग कर रहे हैं ... आप यहां देख सकते हैं: http://developer.android.com/training/in-app-billing/preparing-iab-app.html –

2

पहला IllegalStateException ऐसा इसलिए हो रहा है क्योंकि आईएबी हेल्पर का उपयोग कर पहले लॉन्च ऑपरेशन अभी तक पूरा नहीं हुआ है।

संभावित कारणों:

  1. गतिविधि के onDestroy() में mHelper.dispose() कॉल करने के लिए भूल।
  2. यदि आप बटन पर खरीद लॉन्च कर रहे हैं तो क्लिक करें कुछ डिवाइस पर बटन को तेज़ी से डबल टैप करने से क्रैश उत्पन्न होगा।

अपने मामले में आप पहले से ही एक लॉन्च खरीद प्रगति पर सूची पूछने की कोशिश कर रहे हैं।

समाधान: एसिंक ऑपरेशन की स्थिति IabHelper में परिवर्तनीय mAsyncInProgress में प्रतिबिंबित होती है। आपको चर के दायरे को public में बदलना होगा, यह डिफ़ॉल्ट रूप से पैकेज होगा। आप चर के पूछताछ के बाद दो दृष्टिकोणों में से किसी एक को ले सकते हैं:

सुनिश्चित करें कि आपने गतिविधि में mHelper.dispose() कहा है।

  1. वर्तमान कार्रवाई को रद्द और शुरू नई आपरेशन उपेक्षा

या

  1. वर्तमान अनुरोध करता है, तो किसी भी आपरेशन चल रहा है।

अपवाद flagStartAsync फ़ंक्शन में फेंक दिया गया है।

NullPointerException के मूल कारण को जानने के लिए आपको लाइन नंबरों के साथ लॉन्च खरीद के लिए कोड प्रदान करना होगा।

अन्य सावधानियों ले जाना चाहिए: से बचने के लिए "आईएबी सहायक सेट नहीं है कार्रवाई नहीं कर सकते हैं:। LaunchPurchaseFlow जो तब होता है जब आप launchPurchaseFlow फोन से पहले IabHelper सेटअप पूर्ण होने पर

आप खरीद निष्क्रिय कर सकते हैं। डिफ़ॉल्ट रूप से बटन। IabHelper के onIabSetupFinished कॉलबैक पर बटन सक्षम करें। इसलिए बटन केवल तभी काम करेगा जब IabHelper सेटअप पूरा हो जाएगा।

संबंधित मुद्दे