2012-03-13 20 views
21

मुझे इन-ऐप खरीदारियां ठीक काम कर रही हैं, और मैं सर्वर सत्यापन मार्ग जा रहा हूं। सर्वर को यह जानने की ज़रूरत है कि मैं सैंडबॉक्स में हूं या नहीं, इसलिए अब मैं इसे "& सैंडबॉक्स = 1" पैरामीटर भेज रहा हूं। बेशक जब ऐप का पूरा संस्करण बाहर है तो मैं इस पैरामीटर को नहीं भेजूंगा।(आईओएस + स्टोरकिट) क्या मैं पता लगा सकता हूं कि जब मैं सैंडबॉक्स में हूं?

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

क्या कोई तरीका है कि मैं स्टोरकिट से पूछ सकता हूं कि अगर मैं सैंडबॉक्स में हूं तो मैं यह निर्धारित कर सकता हूं कि मुझे यह पैरामीटर मेरे सर्वर पर भेजने की आवश्यकता है या नहीं? वैकल्पिक रूप से, क्या सर्वर सत्यापन को संभालने के लिए कोई अन्य सर्वोत्तम अभ्यास है?

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

धन्यवाद।

+0

इस पर चर्चा की गई है [इन-ऐप खरीद के साथ सदस्यता प्रबंधित करना] (https://developer.apple.com/videos/wwdc/2012/?id=308)। समय: 24:13 – DanSkeel

उत्तर

62

बाद मैं एप्पल के Technical Note TN2259 से पाया खुदाई का एक सा:

मैं अपने रसीद (आईओएस) जांच कैसे करूँ?

हमेशा उत्पादन रसीद के साथ अपनी रसीद को सत्यापित करें; यदि आपको 21007 स्टेटस कोड प्राप्त होता है तो सैंडबॉक्स यूआरएल के साथ सत्यापित करने के लिए आगे बढ़ें। इस दृष्टिकोण के बाद यह सुनिश्चित करता है कि आपको यूआरएल के बीच स्विच करने की ज़रूरत नहीं है, जबकि आपके एप्लिकेशन का परीक्षण किया जा रहा है या सैंडबॉक्स में समीक्षा की जा रही है या ऐप स्टोर में लाइव है।

तो ऐसा लगता है कि मुझे &sandbox पैरामीटर पूरी तरह से कुल्हाड़ी करना चाहिए और बस ऐसा करना चाहिए। मुझे वास्तव में इस जवाब के लिए खोदना पड़ा था इसलिए मैं इसे यहां उम्मीद कर रहा हूं कि कोई और इसे चलाएगा!

+0

यह भी ऐसा लगता है: विशेष रूप से उस कोड पर भरोसा न करें: http://stackoverflow.com/questions/9677193/ios-storekit-can-i-detect-when-im-in-the -sandbox – Fattie

+4

भविष्य के आगंतुकों के लिए थोडा समय बचाने के लिए एक टिप्पणी: यह सच है कि कुछ दस्तावेज़ स्थिति कोड की एक तालिका दिखाते हैं जो माना जाता है कि केवल सदस्यता सत्यापन के लिए है, लेकिन इस कोड के लिए विशेष रूप से इस व्यवहार के लिए ऐप्पल द्वारा अनुशंसित किया जा सकता है इस जवाब में लिंक पर देखा जाना चाहिए। तो 21007 भरोसा करने के लिए सुरक्षित होना चाहिए। – roguenet

+0

नोट यहां स्थानांतरित किया गया है: https://developer.apple.com/library/ios/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPTURL –

8

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

सशर्त रूप से एक ऐप को इंगित करने के लिए मेरे ऐप को सशर्त बनाने के बजाय, मैं एक स्क्रिप्ट का उपयोग करूंगा जो पहले उत्पादन सर्वर की कोशिश करता है और फिर सैंडबॉक्स सर्वर पर वापस आ जाता है अगर उसे 21007 स्टेटस कोड प्राप्त होता है, जैसा ऊपर बताया गया है !

बहुत बहुत धन्यवाद!

6

हमेशा उत्पादन रसीद के साथ अपनी रसीद को सत्यापित करें; यदि आपको 21007 स्टेटस कोड प्राप्त होता है तो सैंडबॉक्स यूआरएल के साथ सत्यापित करने के लिए आगे बढ़ें।

दुर्भाग्यवश, तकनीकी नोट उल्लेख करने में विफल रहता है यह केवल ऑटो-नवीनीकरण सदस्यता के लिए मान्य है!

In-App Purchase Programming Guide के रूप में तालिका 7-1 नीचे का उल्लेख है:

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

गैर-नवीनीकरण सदस्यता के लिए, उत्पादन सर्वर स्थिति कोड नहीं देता है, लेकिन उचित रसीद।

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

+0

यह एक बिल्कुल महत्वपूर्ण बिंदु है , जीआर, उस झंडे के लिए धन्यवाद। ध्यान दें कि 21008 और 21006 भी रिलायंस हो सकते हैं। http://stackoverflow.com/questions/9677193/ios-storekit-can-i-detect-when-im-in-the-sandbox निश्चित रूप से सबसे अच्छा समाधान किसी भी त्रुटि की तलाश करना है, यानी "सफलता की स्थितियों की कमी "। – Fattie

+0

"आपके सर्वर पर प्राप्तियां मान्य करते समय, आपके सर्वर को ऐप्पल के परीक्षण वातावरण से अपनी प्राप्तियां प्राप्त करने वाले उत्पादन-हस्ताक्षरित ऐप को संभालने में सक्षम होना चाहिए। अनुशंसित दृष्टिकोण आपके उत्पादन सर्वर के लिए हमेशा उत्पादन ऐप स्टोर के विरुद्ध प्राप्तियां मान्य करने के लिए है। सत्यापन कोड "सैंडबॉक्स रसीद उत्पादन में प्रयुक्त" त्रुटि कोड के साथ विफल रहता है, इसके बजाय परीक्षण वातावरण के खिलाफ मान्य करता है। " (Https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/StoreKitGuide.pdf) –

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

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