2012-07-11 7 views
6

यह पहली बार है जब मैं एंड्रॉइड ऐप में इन-ऐप बिलिंग लागू कर रहा हूं और मैंने सीधे कोड को guideline से लिया और सबकुछ ठीक से भूल गया, मैंने धनवापसी के बारे में सोचा। उदाहरण ऐप पहले ही लागू कर चुका है, लेकिन एक अजीब तरीके से! वापसी खरीद के रूप में एप्लिकेशन पर प्राप्त होता है, लेकिन वापसी के राज्य के साथ जो पूरी तरह समझा जा सकता है लेकिन मूल स्रोत इस तरह दिखता है:एंड्रॉइड इन-ऐप बिलिंग रिफंड

 // Count the number of times the product was purchased 
     while (cursor.moveToNext()) { 
      int stateIndex = cursor.getInt(2); 
      PurchaseState state = PurchaseState.valueOf(stateIndex); 
      // Note that a refunded purchase is treated as a purchase. Such 
      // a friendly refund policy is nice for the user. 
      if (state == PurchaseState.PURCHASED || state == PurchaseState.REFUNDED) { 
       quantity += 1; 
      } 
     } 

     // Update the "purchased items" table 
     updatePurchasedItem(productId, quantity); 

इसकी जोड़ने आइटम भले ही वह वापस कर दिया गया और मुझे नहीं पता कि ऐसा क्यों है मिल गया? क्या धनवापसी की गई वस्तु में विशेष आईडी है या मुझे क्या याद आ रही है? मैंने अभी तक परीक्षण उत्पादों के साथ यह कोशिश की है इसलिए मुझे कोई जानकारी नहीं मिली।

updatePurchasedItem विधि मेज से प्रविष्टि को हटा अगर मात्रा 0 जो पूरी तरह सही लगता है, इसलिए मैं इस

 while (cursor.moveToNext()) { 
      int stateIndex = cursor.getInt(2); 
      PurchaseState state = PurchaseState.valueOf(stateIndex); 
      // Note that a refunded purchase is treated as a purchase. Such 
      // a friendly refund policy is nice for the user. 
      if(Consts.DEBUG) 
       Log.v(TAG, state == PurchaseState.PURCHASED ? "purchase" : "refund"); 

      if (state == PurchaseState.PURCHASED) { 
       quantity += 1; 
      } else if(state == PurchaseState.REFUNDED) { 
       quantity = 0; 
      } 
     } 

     // Update the "purchased items" table 
     updatePurchasedItem(productId, quantity); 

करने के लिए अपने कोड बदल लेकिन मुझे शक है वहाँ उदाहरण अनुप्रयोग में गलत कोड तो मैं पूरी तरह से अनिश्चित हूं होगा अगर मैं इसे सही कर रहा हूँ!

मुझे इसे कैसे संभालना चाहिए? कृपया मेरी मदद करें!

+0

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

+0

मात्रा उस समय खरीदी गई वस्तुओं की मात्रा के लिए है (मुझे लगता है कि एक बार में एक से अधिक आइटम खरीदने के लिए भी संभव नहीं है), और किसी कारण से आइटम को वापस करने पर भी मात्रा बढ़ाना। अद्यतन खरीदा गया इटिम प्रवेश को हटा देता है अगर उसे 0 की मात्रा के साथ उत्पाद प्राप्त होता है, जिसे मुझे पता है कि रिफंड इंगित किया जाता है क्योंकि यह कहीं भी राज्य डेटा का उपयोग नहीं करता है। आप यहां उदाहरण देख सकते हैं http://developer.android.com/guide/google/play/billing/billing_integrate.html#billing-download – Ruuhkis

उत्तर

5

इतिहास तालिका में प्रति खरीद एक एकल प्रविष्टि है। इसका मतलब है कि एक खरीद जिसे बाद में धनवापसी की गई थी, धनवापसी के बाद, "धनवापसी" की स्थिति के साथ उत्पाद के लिए एक इतिहास रिकॉर्ड होगा।

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

यदि आप धनवापसी की गणना नहीं करना चाहते हैं, तो आपको खरीद के लिए मात्रा जोड़ने के लिए अपना कोड बदलना चाहिए, लेकिन धनवापसी के लिए कुछ भी नहीं करना चाहिए। (मात्रा को शून्य पर सेट न करें)।

एप्लिकेशन के तहत उत्पादों में 3 प्रकार के होते हैं:

  1. प्रबंधित आइटम: गूगल एक बार से अधिक इस तरह के उत्पादों की खरीद के लिए अनुमति नहीं है। कुल मात्रा केवल शून्य या एक तक जोड़ सकती है।

  2. अप्रबंधित आइटम: उपयोगकर्ता ऐसे उत्पादों को कई बार खरीद सकते हैं। कुल मात्रा शून्य या अधिक

  3. सदस्यता: प्रबंधित वस्तुओं के समान ही हो सकती है।

+0

स्पष्ट उत्तर के लिए धन्यवाद! – Ruuhkis