2013-02-09 42 views
6

मैं अपने अनुप्रयोग में अनुप्रयोग खरीद में लागू कर दिया है मैं इन-एप्लिकेशन बिलिंग का संस्करण 3 के लिए "TrivialDrive" उदाहरण का इस्तेमाल किया है के बाद दुर्घटनाग्रस्त, मैं अपेक्षा के अनुरूप स्थिर प्रतिक्रियाओं सभी कार्यों का उपयोग करके एप्लिकेशन का परीक्षण किया है।एंड्रॉयड एप्लिकेशन के अंतर्गत खरीदी भुगतान

लेकिन जब मैं बाजार, सफल खरीद पर अनुप्रयोग क्रैश से एप्लिकेशन डाउनलोड,

मेरे कोड सफल खरीद की है

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 

    Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 
    if (result.isFailure()) { 
    complain("Error purchasing: " + result); 
    } 

    if (purchase != null) { 
    if (purchase.getSku().equals(Constants.IN_APP_PURCHASE_PRODUCT_ID)) { 
     // bought the premium upgrade! 
     String message = getResources().getString(R.string.app_purchase_successful_msg); 
     mIsPremium = true; 
     updateUi(mIsPremium); 
     successAlert(message); 
    } 
    } 
} 
}; 

मैं सफल खरीद पर संदेश की स्थापना की है, लेकिन मैं नहीं कर सकते यह संदेश दिखाई दे, (जिसका मतलब है कि वे लिस्से निष्पादित नहीं कर रहे हैं) जब मैंने सफलतापूर्वक इसे खरीदा, तो सफल भुगतान के बाद आवेदन क्रैश हो गया।

जब ऐप को फिर से लॉन्च करें और आइटम खरीदने का प्रयास करें तो यह पहले से ही खरीदा गया है।

मुझे डेवलपर कंसोल से क्रैश रिपोर्ट मिली।

02-09 02:01:13.181: E/AndroidRuntime(11530): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=-1, data=Intent { (has extras) }} to activity {com.eknathkadam.grammaruplite/com.webrich.base.ui.GoogleInAppPurchaseActivity}: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3141) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Looper.loop(Looper.java:137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invokeNative(Native Method) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invoke(Method.java:511) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at dalvik.system.NativeStart.main(Native Method) 
**02-09 02:01:13.181: E/AndroidRuntime(11530): Caused by: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Base64.decode(Base64.java:434)** 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.generatePublicKey(Security.java:87) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.verifyPurchase(Security.java:66) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.IabHelper.handleActivityResult(IabHelper.java:437) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.webrich.base.ui.GoogleInAppPurchaseActivity.onActivityResult(GoogleInAppPurchaseActivity.java:238) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.Activity.dispatchActivityResult(Activity.java:5192) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): ... 11 more 
02-09 02:02:20.610: E/JavaBinder(250): !!! FAILED BINDER TRANSACTION !!! 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:22.028: E/InputDispatcher(250): channel '41f313f0 com.android.vending/com.android.vending.AssetBrowserActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 
02-09 02:03:59.884: E/PowerManagerService(250): Excessive delay setting brightness: 198ms, mask=2 

इसके onActivityResult() इस लाइन

if (!mHelper.handleActivityResult(requestCode, resultCode, data)) 

विधि इस

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

यह स्थिर प्रतिक्रिया लेकिन मैं जब पर दुर्घटनाओं पर पूरी तरह से ठीक काम करता है की तरह है पर विधि में अशक्त सूचक अपवाद फेंक बाजार से खरीद

+1

मुझे कल से ही एक ही समस्या का सामना करना पड़ रहा है। मुझे आशा है कि मुझे यहां कुछ समाधान मिलेगा। –

+0

मुझे कल से ही इस समस्या का सामना करना पड़ रहा है, नहीं पता कि – Goofy

+0

@MehulJoisar आपने अपना ऐप कब अपलोड किया है? – Goofy

उत्तर

0

मुझे बिल्कुल वही समस्या का सामना करना पड़ रहा था। फिर, मुझे एहसास हुआ कि खरीद प्रक्रिया के दौरान कभी-कभी पूरी गतिविधि फिर से बनाई जाती है (बिना किसी कारण से)। मैंने यह भी जांचने के लिए ट्रिविया उदाहरण का परीक्षण नहीं किया है कि यह ऐप के साथ भी होता है, लेकिन मैं इसकी अपेक्षा करता हूं, क्योंकि यह बिलिंग प्रक्रिया से संबंधित प्रतीत होता है (या उस उदाहरण के सहायक तरीकों से, जो कि मैं अपने ऐप में उपयोग करता हूं भी)।

मेरे अपने कोड और ट्रिविया उदाहरण के बिलिंग हिस्से के बीच एकमात्र अंतर यह था कि मैं एक निश्चित घटना पर लॉन्च की गई विधि से एमएचपर को तत्काल कर रहा था, जबकि ट्रिविया उदाहरण को क्रिएट से तत्काल किया गया था। तो मैंने उस बदलाव को बनाया (मैं अब मेरपर का नया उदाहरण बना रहा हूं), और सब कुछ ठीक काम करना शुरू कर दिया। बात है जब गतिविधि से निर्मित है, है, mHelper onCreate में फिर से instantiated हो जाता है, onActivityResult को निम्नलिखित कॉल में हां, तो यह शून्य नहीं हो सकता।

ईमानदार होने के नाते, मैं कोई सुराग नहीं क्यों गतिविधि से निर्मित है और यही कारण है गतिविधि का नया उदाहरण के onActivityResult विधि कहा जाता है, लेकिन अब सब कुछ काम करने के लिए लगता है।

+0

यह अजीब लगता है! –

+0

हां, मुझे पता है कि यह अजीब लगता है, लेकिन यह काम करता है, और यह निश्चित रूप से समस्या का स्रोत है। मुझे पूरा यकीन है कि समस्या ट्रिविया उदाहरण के पुस्तकालयों से संबंधित है, न कि इन ऐप बिलिंग में, इसलिए मूल प्रश्न में आपकी टिप्पणी, "मुझे लगता है कि इन-एप v3 अभी तक स्थिर नहीं है", इसका कोई मतलब नहीं है। मैं @Mac, जिस व्यक्ति ने प्रश्न बनाया है, पोस्ट करने के लिए, अगर वह mreperper उदाहरण को क्रिएट विधि से बाहर ले गया है, जैसा कि मैंने पहले किया था ... – thelawnmowerman

+0

ठीक है और हाँ, कुछ बग है, गतिविधि पुनर्निर्मित नहीं किया जाना चाहिए। और स्पष्ट रूप से मैंने इन-एप v3 (मतलब इन-एप v3 लाइब्रेरी) के लिए टिप्पणी की थी, न कि Google की पूरी इन-ऐप खरीद सुविधा के लिए। –

0

मुझे एक ही समस्या थी। मैं क्या पाया गया कि जब इन-ऐप खरीदारी बॉक्स प्रदर्शित होता है, विधि onPause अपने आवेदन गतिविधि में मार डाला जाता है और जब बॉक्स बंद कर दिया है तो विधि onResume क्रियान्वित किया जाता था।

@Override 
public void onPause() 
{ 
    mWakeLock.release(); 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    mWakeLock.acquire(); 
} 

अंत में मैं लाइनों जिसमें mWaveLock निष्पादित किया जाता है हटा दें: यह इन तरीकों में से कोड है।

@Override 
public void onPause() 
{ 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
} 

और यह ठीक काम करता है। मुझे उम्मीद है कि यह किसी की मदद करेगा।

0

मैं जानता हूँ कि इस सूत्र पुराना है, लेकिन मैं शायद सिर्फ एक ही समस्या थी। आपकी विधि

complain("Error purchasing: " + result); 

क्या करता है?

मैं

Toast.makeText(getParent(), "Premium purchased successfully", Toast.LENGTH_LONG) 
        .show(); 
ठीक उसी जगह में

कहा जाता है, और यह मेरे लिए निम्न त्रुटि के कारण होता है:

06-26 14:02:54.229: E/AndroidRuntime(25681): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=0, data=Intent { (has extras) }} to activity {sf.com.flightBook/sf.com.flightBook.ui.configuration.ConfigurationMain}: java.lang.NullPointerException 

यदि यह अभी भी आप के लिए प्रासंगिक है, तो आप की जाँच करनी चाहिए अपने "शिकायत ()" तरीका।

1

मैं अपने IabHelper सदस्य चर (mHelper) स्थिर बनाने के लिए बस द्वारा इस समस्या का समाधान हो

0

जब मैं इस समस्या को मैं पता लगा कि अपने आवेदन में अपने सार्वजनिक कुंजी लाइसेंस के लिए कुंजी जो गूगल उत्पन्न नाटक अनुरूप नहीं है था मेरे ऐप के लिए