2015-05-27 7 views
6

मैं जानना चाहता हूं कि आईएपी ऑटो-नवीनीकरण सदस्यता ऑटो नवीनीकरण करते समय ऐप रसीद स्वचालित रूप से रीफ्रेश हो जाती है या नहीं। प्रलेखन का तात्पर्य है कि एप्लिकेशन रसीद जब एक खरीद (नवीकरण?) किया जाता है, लेकिन मैं आईएपी सैंडबॉक्स में इस व्यवहार को नहीं दिखाई दे रहा अद्यतन किया जाता है:ऑटो-नवीनीकरण सदस्यता और ऐप रसीद

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

अन्य सभी प्रकार की खरीदारियों के बारे में जानकारी रसीद में दी जाती है जब उन्हें भुगतान किया जाता है और अनिश्चित काल तक रसीद में रहता है।

इसके अलावा, डॉक्स राज्य:

एक सदस्यता के बाद सफलतापूर्वक नवीनीकृत किया जाता है, स्टोर किट लेनदेन कतार में नवीकरण के लिए एक लेनदेन कहते हैं। आपका ऐप लॉन्च पर लेनदेन कतार की जांच करता है और नवीनीकरण को किसी अन्य लेनदेन के रूप में उसी तरह से संभालता है। ध्यान दें कि यदि आपका ऐप पहले ही चला रहा है, जब सदस्यता नवीनीकृत हो, लेनदेन पर्यवेक्षक को कॉल नहीं किया जाता है; आपका ऐप अगली बार लॉन्च होने पर नवीनीकरण के बारे में पता लगाता है।

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

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

+0

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

+0

मैं आरएमएसटीओआर का उपयोग करके प्राप्ति क्लाइंट पक्ष को डीकोड कर रहा हूं और ऐप्पल के साथ सर्वर-साइड को मान्य कर रहा हूं। यह सब काम करने लगता है। – TomSwift

+0

ठीक है, ठंडा। मुझे आरएमएसटीओआर के विवरण नहीं पता; क्या आप प्रविष्टियों की पूरी सूची चल रहे हैं या क्या यह आपके लिए करता है? आपके पास प्रत्येक नवीनीकरण के लिए सदस्यता प्रविष्टि होनी चाहिए। –

उत्तर

4

एक तरफ ध्यान दें के रूप में, प्रलेखन खरीद के प्रकार और रसीद में अपने हठ पर असंगत है - my answer to this question.

देख रसीद सर्वर साइड पर अद्यतन किया जाता है जब से स्वतः नवीनीकरण टिक से अधिक - आप सर्वर-साइड validateReceipt विधि पर कॉल के साथ जांच करके इसकी पुष्टि कर सकते हैं।

अद्यतन: यह देखते हुए कि आप आरएमएसटोर का उपयोग कर रहे हैं, मैंने कुछ मजाक उड़ाया ताकि मैं व्यवहार को देख सकूं।

ऐसा लगता है कि क्लाइंट-साइड रसीद अपडेट किया जा रहा है। मेरा परिदृश्य: एक महीने एआर सदस्यता (इसलिए सैंडबॉक्स में 5 मिनट का नवीनीकरण)। मैं viewDidLoad में कुछ नैदानिक ​​कोड डाल:

RMAppReceipt *receipt = [RMAppReceipt bundleReceipt]; 
if (receipt != nil) { 
    NSDateFormatter* localDateTime = [[NSDateFormatter alloc] init]; 
    [localDateTime setTimeZone:[NSTimeZone timeZoneWithName:@"PST"]]; 
    [localDateTime setDateFormat:@"yyyy.MM.dd HH:mm:ss zzz"]; 

    for (RMAppReceiptIAP* purchase in receipt.inAppPurchases) { 
     NSString* cancellationDate = nil; 
     if (purchase.cancellationDate) { 
      cancellationDate = [localDateTime stringFromDate:purchase.cancellationDate]; 
     } 
     NSLog(@"Transaction: %@: product %@, original purchase date: %@, expiration date: %@, cancellation date: %@", 
       purchase.originalTransactionIdentifier, 
       purchase.productIdentifier, 
       [localDateTime stringFromDate:purchase.originalPurchaseDate], 
       [localDateTime stringFromDate:purchase.subscriptionExpirationDate], 
       cancellationDate); 
    } 

मैं भी RMStore के paymentQueue:updatedTransactions: में एक ब्रेकपाइंट डाल अगर कतार बाद एआर खरीद के साथ अद्यतन किया जाता है देखने के लिए।

फिर मैंने अपने परीक्षण उत्पाद का एक महीने खरीदा, लेनदेन की पुष्टि की और फिर आवेदन छोड़ दिया।

5 मिनट अंतराल पर आवेदन के बाद के पुन: आमंत्रण पर, मैंने लेनदेन के साथ SKPaymentTransactionObserver विधि में ब्रेकपॉइंट देखा, SKPaymentTransactionStatePurchased

2015-05-27 14:27:32.828 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:02:59 GMT-7, expiration date: 2015.05.27 14:07:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:33.350 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:06:02 GMT-7, expiration date: 2015.05.27 14:12:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:33.774 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:11:07 GMT-7, expiration date: 2015.05.27 14:17:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:34.174 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:16:00 GMT-7, expiration date: 2015.05.27 14:22:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:34.637 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:21:04 GMT-7, expiration date: 2015.05.27 14:27:58 GMT-7, cancellation date: (null) 
2015-05-27 14:27:35.069 StoreKitSandbox[5803:1054853] Transaction: 1000000156919353: product com.foo.StoreKitSandbox.1_month_autorenew_foo, original purchase date: 2015.05.27 14:26:15 GMT-7, expiration date: 2015.05.27 14:32:58 GMT-7, cancellation date: (null) 

आप इस नैदानिक ​​दृष्टिकोण का उपयोग कर repro सकता है: लॉग (दिखाए केवल पिछले संस्करण) खरीद की लगातार जोड़ से पता चला है?

+0

मैं समझता हूं कि रसीद सर्वर की तरफ अपडेट की गई है - अगर मैं रसीद मैन्युअल रूप से रीफ्रेश करता हूं (उपयोगकर्ता को संकेत देता है) तो यह ऐप में भी अपडेट किया जाता है। मैं जानना चाहता हूं कि ऐप बंडल रसीद ऑटो नवीनीकरण पर अपडेट की जाएगी (क्योंकि यह पहली खरीद पर है)। पूर्ण लेनदेन की निगरानी के लिए, यह addTransactionObserver के माध्यम से है: डिफ़ॉल्ट SKPaymentQueue पर। कॉलिंग पुनर्स्थापित करें पूर्णतया लेनदेन या रीफ्रेश केवल उपयोगकर्ता इनपुट के जवाब में ही किया जाना चाहिए - जिसे मैं टालना चाहता हूं। – TomSwift

+0

सभी प्रयासों के लिए धन्यवाद - मैं वास्तव में इसकी सराहना करता हूं। कम और देखो, यह भी मेरे लिए काम करना शुरू कर दिया। मुझे नहीं पता कि मुझे इसे अपने अंत में सैंडबॉक्स gremlins या gremlins तक चाक करना चाहिए - मैं काम कर रहा था जब मैं कल रात बहुत थक गया था। – TomSwift

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