2012-12-18 8 views
6

विचार यह है कि क्या बारिश या चमक, गीला या ठीक है, उपयोगकर्ता को यह पता होना चाहिए कि उसने सभी के लिए भुगतान किया है।इन-ऐप खरीद लेनदेन को पुनर्स्थापित करना

एप्पल से

:

 
Store Kit provides built-in functionality to restore transactions for non-consumable products, auto-renewable subscriptions and free subscriptions 

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

वर्तमान समाधान नहीं है:

  1. सर्वर उत्पाद पहचानकर्ता
  2. उपयोगकर्ता एक का चयन करता है की एक सूची देता है; ऐप डिवाइस पर अपने पहचानकर्ता को बचाता है (SQLite या कोर डेटा के माध्यम से)। स्टैंडअर्ट ऐप्पल स्टोर लेनदेन प्रक्रिया उसके ठीक बाद जाती है।
  3. सफलता आवेदन के मामले में डिवाइस पर इसके पहचानकर्ता के साथ रसीद डेटा बचाता है और इसे सर्वर पर भेजता है। अगर विफलता या रद्द किया गया था तो पहचानकर्ता को डिवाइस से तत्काल हटा दिया गया है।
  4. यदि सर्वर की प्रतिक्रिया ठीक है तो ऐप डिवाइस से रसीद डेटा के साथ पहचानकर्ता को हटा देता है। अन्यथा यह सफल प्रतिक्रिया व्यवहार तक सर्वर को समय-समय पर अनुरोध भेजेगा।

लेकिन इस दृष्टिकोण में अभी भी रिसाव है। उदाहरण के लिए, उपयोगकर्ता डिवाइस से एप्लिकेशन को हटा सकता है जो सर्वर पर लेनदेन के लिए इंतजार नहीं कर रहा है, इसलिए उसकी खरीद के बारे में कोई सबूत नहीं होगा।

आपके सुझाव?

उत्तर

3

मौलिक नियम यह है कि आप फिनिश ट्रांज़ेक्शन को कॉल नहीं करते हैं: जब तक आपने सफलतापूर्वक सामग्री वितरित नहीं की है तब तक भुगतान कतार पर। इसका मतलब है कि आप अपने सत्यापन और सामग्री सर्वर से अनुरोध करते हैं और वे वैध प्रतिक्रियाओं के साथ वापस आते हैं। केवल उन उचित प्रतिक्रियाओं के बाद आप फिनिश ट्रांज़ेक्शन कॉल करते हैं:। ध्यान दें कि खराब खरीद रसीद मान्य है बस अच्छा नहीं है। आप लोगों को सामानों को रिप्प करने की कोशिश करेंगे - इस पर नींद न खोएं लेकिन उचित रसीद जांच में रखें।

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

बीटीडब्ल्यू, आपकी पहली पंक्ति बिल्कुल सही है और नींद खोने लायक है।

+0

क्या मतलब है "ध्यान दें कि खराब खरीद रसीद वैध है" अच्छा नहीं है? – Danik

+0

मुझे बस यह कहना था कि आप अभी भी समाप्त कर चुके हैं ट्रांज़ेक्शन: जब रसीद खराब होती है लेकिन आप उत्पाद वितरित नहीं करते हैं। आपको सर्वर पर कुछ भी लॉग करना चाहिए और उपयोगकर्ता को सूचित करना चाहिए। मैं वास्तव में तब तक उत्पाद वितरित करने के लिए अपनी सामग्री सेट अप करता हूं जब तक कि मुझे यकीन न हो कि रसीद सत्यापन में कोई भी बग था। मुझे लगता है कि अमेज़ॅन पर काम किया लेकिन ऐप्पल या Google नहीं। कम से कम अमेज़ॅन पर, यह मुझे अपनी खुद की बग से बचाया। – DrC

+0

वैसे भी इसे सामग्री रिप्प प्रयास को रोकने के लिए उपर्युक्त कुंजी की सूची में सहेजने की आवश्यकता है। कहें, ऐप को प्रतिक्रिया प्राप्त नहीं हुई है, और उपयोगकर्ता डिवाइस बंद कर देता है।जब ऐप स्टोर किट को फिर से अनुरोध भेजता है, लेकिन ऐप के पास उस समय लेनदेन के बारे में कोई जानकारी नहीं है। हम कुंजी और उसके पहचानकर्ता द्वारा लेनदेन की पहचान कर सकते हैं और इसे सर्वर पर भेज सकते हैं। जब सर्वर सत्यापन समाप्त करता है, ऐप कॉल समाप्त होता है ट्रांज़ेक्शन:। अगर गलत साबित हुआ है, तो सर्वर इस लेनदेन के अनुरोधों को रोकने के लिए ऐप को सूचित कर सकता है। निलंबित लेनदेन द्वारा सर्वर के बोझ को रोकने के लिए अनुरोधों को सीमित करने के लिए भी अच्छा है। – Lion

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