2011-11-29 13 views
5

मुझे अपने paymentQueue:updatedTransactions: प्रतिनिधि विधि में कोई लेनदेन प्राप्त नहीं हो सकता है। केवल प्रतिनिधि विधि paymentQueueRestoreCompletedTransactionsFinished: डीबगर द्वारा हिट हो जाती है। जब मैं लेनदेन सरणी को पुनः प्राप्त करने का प्रयास करता हूं, तो मुझे एक खाली सरणी मिलती है।SKPaymentQueue बहाली पूर्णतया लेनदेन: कोई लेनदेन बहाल नहीं

सबसे पहले, मैं एक गैर-नवीनीकरण उत्पाद खरीदता हूं। सर्वर से सफलतापूर्वक खरीद और सत्यापन करने के बाद, इसे भुगतान कतार से निकाल दिया जाएगा। स्टार्टअप से, मैं पेमेंट्यूज restoreCompletedTransactions विधि को कॉल करता हूं। जैसा कि उम्मीद है कि स्टोरकिट मुझे पासवर्ड के लिए पूछता है (सैंडबॉक्स-उपयोगकर्ता से) जो मैं दर्ज करता हूं। लेकिन अपडेट विधि नहीं मिलेगी। केवल खत्म विधि पकड़ा जाता है और वर्णित के रूप में, लेनदेन खाली होते हैं।

क्या मैं गलत कर रहा हूँ? क्या यह मेरी गलती है, या यह restoreCompletedTransactions broken? सेब है?

धन्यवाद और बीआर Nic

+0

यदि मैं सही हूं तो आपको अपने सर्वर पर लेनदेन रसीदों का ट्रैक रखना होगा। – JoePasq

+0

मैं करता हूं। लेकिन जब भी मैं पुनर्स्थापित कॉम्प्लेटेड ट्रांस्सेक्शन विधि को कॉल करता हूं, तो उसे सभी खरीदारियों को पुनर्स्थापित करना चाहिए (इसलिए इन-ऐप खरीद प्रोग्रामिंग गाइड) – NicTesla

+1

उपभोग योग्य उत्पादों को पुनर्स्थापित नहीं किया जाना चाहिए, वे एक बार उपयोग कर रहे हैं। एक गैर उपभोग्य के साथ इसका परीक्षण करें। – JoePasq

उत्तर

3

सूचना देने के लिए इस तरह के एक लंबे समय के लिए प्रतीक्षा के लिए क्षमा करें!

समस्या यह है कि सेब In-App Purchase Programming Guide में यह स्पष्ट रूप से कहता है कि मैं पुनर्स्थापित करने के लिए गैर-नवीनीकरण सदस्यता नहीं ले सकता। मुझे अपनी खुद की खरीद को स्टोर करना होगा और अपनी पुनर्स्थापना कार्यक्षमता को लागू करना होगा।

मैंने जो किया वह उत्पाद नाम में कुछ पहचानकर्ताओं सहित था, जो मुझे बताते हैं कि यह किस प्रकार का उत्पाद है। (अपने स्वयं के सर्वर का उपयोग किये बिना उत्पाद की जानकारी स्टोर करने का यह एक तरीका है) तो मेरे उत्पाद का नाम उदा। com.mycompany.iphone.non_renewing_30d (यह उत्पाद वास्तव में एक गैर नवीनीकरण उत्पाद के रूप में कॉन्फ़िगर किया गया है)

तो जब उपयोगकर्ता खरीदारी करता है, तो मैं इस जानकारी को iDevice के CoreData डेटाबेस में संग्रहीत करता हूं। मैं अपनी समाप्ति कार्यक्षमता भी शामिल करता हूं, क्योंकि मेरे पास खरीद की तारीख है और उत्पाद की समाप्ति तिथि (30 डी) है।

जब समय समाप्त हो जाता है, तो उपयोगकर्ता एक संदेश संवाद देखता है जो एक नई खरीद करने के लिए कहता है। मुझे वास्तव में गैर-नवीनीकरण सदस्यता के सेब कार्यान्वयन पसंद नहीं है क्योंकि यह उपयोगकर्ता को बताता है कि उसने पहले से ही उत्पाद खरीदा है और उन्हें पुनर्खरीद करने के लिए कहा है, लेकिन मुझे इससे निपटना पड़ा।

मैं वास्तव में आईओएस डिवाइस पर खरीद जानकारी स्टोर करने का सुझाव देता हूं, क्योंकि आपको अपने उपयोगकर्ता को कार्यक्षमता पहचानने की आवश्यकता नहीं है (जैसे उपयोगकर्ता आईडी या ईमेल एड्रेस), क्योंकि ऐप्पल ने यूडीआईडी ​​विशिष्टता को बंद कर दिया है।

+0

लेकिन जब उपयोगकर्ता ऐप को अनइंस्टॉल करता है, तो वे अपनी खरीद खो देते हैं। क्या इसके आसपास कोई रास्ता है? – JDx

+1

सही है! आपको इसे अपने सर्वर पर स्टोर करने की आवश्यकता है। किसी विशिष्ट उपयोगकर्ता के लिए डेटा स्टोर करने के लिए, आपको अपना खाता/लॉगिन सिस्टम भी बनाना होगा। बीआर – NicTesla