2016-08-10 3 views
22

की सदस्यता ली है या नहीं, उम्मीद है कि शीर्षक आत्म-व्याख्यात्मक है। मैं ऐसा कुछ करने की कोशिश कर रहा हूं:आईओएस: यह पता लगाने के लिए कि उपयोगकर्ता ने ऑटो-नवीकरणीय सदस्यता

checkIfUserIsSubscribedToProduct(productID, transactionID: "some-unique-transaction-string", completion: { error, status in 
    if error == nil { 
     if status == .Subscribed { 
      // do something fun 
     } 
    } 
} 

मेरे द्वारा प्रदान किए गए काल्पनिक कोड की तरह कुछ भी करता है? मुझे लगता है कि मैं पागल की गोलियाँ

संपादित

इसी तरह के सवाल मैं की लेकिन कैसे, या यहाँ तक कि एक रसीद है क्या पर कोई स्पष्टीकरण नहीं "ओह आप रसीद मान्य होगा" एक सामान्य जवाब दिखाई दे रहा है में ले रहा हूँ । क्या कोई मुझे "रसीद को मान्य करने" के साथ प्रदान कर सकता है? मैंने this tutorial की कोशिश की लेकिन काम नहीं लग रहा था।

संपादित करें - बाउंटी लिए

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

उत्तर

16

मुझे पता है कि हर कोई मेरे बारे में बहुत चिंतित था और मैं इस पर क्या कर रहा था - डर नहीं, मेरी समस्या हल हो गई। मुख्य समस्या यह थी कि मैंने the garbage and outdated code in this link की कोशिश की, लेकिन यह काम नहीं कर रहा था इसलिए मैंने इसे छोड़ दिया। तब मैं इसे वापस आया और इसे Alamofire के साथ कार्यान्वित किया और यह बहुत अच्छा काम करता है।

स्विफ्ट 3::

let receiptURL = Bundle.main.appStoreReceiptURL 
let receipt = NSData(contentsOf: receiptURL!) 
let requestContents: [String: Any] = [ 
    "receipt-data": receipt!.base64EncodedString(options: []), 
    "password": "your iTunes Connect shared secret" 
] 

let appleServer = receiptURL?.lastPathComponent == "sandboxReceipt" ? "sandbox" : "buy" 

let stringURL = "https://\(appleServer).itunes.apple.com/verifyReceipt" 

print("Loading user receipt: \(stringURL)...") 

Alamofire.request(stringURL, method: .post, parameters: requestContents, encoding: JSONEncoding.default) 
    .responseJSON { response in 
     if let value = response.result.value as? NSDictionary { 
      print(value) 
     } else { 
      print("Receiving receipt from App Store failed: \(response.result)") 
     } 
} 
+1

मैं आपके महान उत्तर से सहमत हूं हालांकि, सुरक्षा चिंताओं के लिए, सेब के साथ आपके सर्वर पक्ष पर समाप्ति तिथि जांचना अच्छा विचार है। 'वर्तमान समय = NSDate()। समय इंटरवलवल 1 9 70 समाप्त हो गया = currentTime> expiresTime' यदि उपयोगकर्ता डिवाइस की तारीख को अतीत में बदल देता है, तो वह चेक – abdimuna

+0

अच्छा बिंदु पारित कर सकता है। मान लीजिए कि मेरा सर्वर पक्ष फ़ायरबेस के अलावा कुछ भी नहीं है? – rigdonmr

+0

मैंने उस परिदृश्य में फायरबेस के साथ काम नहीं किया है, लेकिन अगर आप अपने पीठ के अंत में सत्यापन को ठंडा कर देते हैं तो यह अच्छा है। – abdimuna

1

आप विशेष रूप से प्राप्त करने की क्या कोशिश कर रहे हैं? क्या आप एक विशिष्ट ऐप्पल आईडी की जांच करना चाहते हैं?

मुझे अत्यधिक संदेह है कि यह एसडीके के माध्यम से संभव है। Is it possible to get the user's apple ID through the SDK? का जिक्र करते हुए आप देख सकते हैं कि आप सीधे आईडी के लिए भी नहीं पूछ सकते हैं बल्कि इसके साथ जुड़ी सेवाएं भी मांग सकते हैं।

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

हालांकि, उपयोगकर्ता जो कुछ भी चाहता था उसे टाइप कर सकता है - और ऐप्पल की ऐप समीक्षा प्रक्रिया के माध्यम से इसे प्राप्त करने की संभावना नहीं है।

+1

ठीक है तो एप्पल आईडी एक बुरा उदाहरण था। मैं बस यह बताने की कोशिश कर रहा था कि मैं यह जांचने का एक तरीका ढूंढ रहा हूं कि सदस्यता सक्रिय है या नहीं।उपयोगकर्ता का सब्सक्राइब करें, फिर उसके सब्सक्रिप्शन को ठीक से हटा दें - मुझे इसका पता लगाने का एक तरीका चाहिए। – rigdonmr

+0

@rigdonmr क्या आपका मतलब सब्सक्रिप्शन रद्द करता है या ऑटो-नवीनीकरण रद्द करता है? यदि पूर्व, प्रक्रिया को रद्दीकरण के तहत वर्णित किया गया है [यहां] (https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html) – Lesleh

+1

मुझे लगता है कि दोनों मामलों को संभालने की आवश्यकता है । मेरा अत्यधिक सवाल यह है कि, क्या कोई एपीआई है जो मुझे उपयोगकर्ता की सदस्यता_ (रसीद, लेनदेन आईडी इत्यादि) के लिए कुछ विशिष्ट भेज देती है और मुझे "सक्रिय" जैसे रद्द किए गए ऑटो नवीनीकरण की स्थिति वापस मिलती है "" पूरी तरह से रद्द किया गया "। देखें कि मैं किसके लिए जा रहा हूं? – rigdonmr

1

मैं ग आप solution.I के लिए पुस्तकालय कोड की जांच कर सकते हैं का उपयोग कर रहा MKSoreKit https://github.com/MugunthKumar/MKStoreKit उपयोग कर रहा हूँ के लिए स्वतः नवीनीकृत subscriptions.but यह उद्देश्य में है यहाँ कोड समाधान है यह मेरे कोड में है और यह ठीक काम कर रहा है।

विधि आप आसानी से सदस्यता स्थिति देख सकते हैं नीचे का उपयोग कर ..

if([MKStoreManager isProductPurchased:productIdentifier]) { 
//unlock it 
} 

यह डिवाइस से सेब आईडी हो जाता है और मुझे लगता है कि उपयोगकर्ता विशिष्ट

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