2011-05-30 8 views
6

में पहले से ही खरीदी गई सदस्यता मैं आईओएस ऐप में ऐप खरीद में नवीकरणीय सदस्यता का उपयोग कर रहा हूं। जब कोई उपयोगकर्ता एक सदस्यता खरीदने का प्रयास करता है जिसे उन्होंने पहले से ही एक संदेश के लिए भुगतान किया है, तो आईट्यून्स से प्रदर्शित होता है "आप वर्तमान में इस पर सदस्यता ले चुके हैं"।स्टोरकिट

इस घटना के दौरान मैं कैसे पता लगा सकता हूं ताकि मैं लेनदेन को संसाधित कर सकूं और अपने ऐप तक पहुंच प्रदान कर सकूं।

भुगतान में Queue: अद्यतन ट्रांस्सेक्शन: पर्यवेक्षक की विधि यह एक SKPaymentTransactionStateFailed के रूप में आ रही है। मैं इस प्रकार की विफलता और अन्य विफलताओं के बीच अंतर कैसे करूं जैसे उपयोगकर्ता रद्द बटन दबा रहा हूं?

क्या मैं वापस लौटाया गया लेनदेन जमा करता हूं या क्या मुझे पुनर्स्थापित करने की आवश्यकता है पूर्वसंवेदनशीलता।

ऐप्पल दस्तावेज़ों में यह कहता है "यदि उपयोगकर्ता एक गैर-उपभोग योग्य उत्पाद या नवीकरणीय सदस्यता खरीदने का प्रयास करता है तो वे पहले से ही खरीदे गए हैं, तो आपके आवेदन को उस आइटम के लिए नियमित लेनदेन प्राप्त होता है, न कि पुनर्स्थापना लेनदेन। हालांकि, उपयोगकर्ता उस उत्पाद के लिए फिर से शुल्क नहीं लिया जाता है। आपके आवेदन को इन लेनदेन को मूल लेनदेन के समान व्यवहार करना चाहिए। "

उत्तर

0
Q: How I can detect when this event (currently subscribed) has occurred so that I can process the transaction and grant access to my app. 

आप का पता लगाने जब सदस्यता एप्पल के साथ मान्यता (मैं php वेबसाइट कोड का उपयोग करते हैं), आप एक "स्थिति कोड" प्रतिक्रिया वापस पाने के लिए, और पुष्टि कर सकते हैं कि क्या यह एक कोड 21006 है (सदस्यता है के माध्यम से मौजूद है समाप्त हो गया), या अन्य (मैं 0 और 21006 के अलावा किसी अन्य त्रुटि को वास्तविक त्रुटि मानता हूं)।

जिस तरह से मैं चीजें करता हूं वह है कि मैं एक PLIST फ़ाइल के अंदर लेनदेन विवरण संग्रहीत करता हूं जिसे मैं दस्तावेज़ निर्देशिका में संग्रहीत करता हूं।

आप, इस तरह के expiryDates, बूलियन झंडे, आदि

इस तरह आप रसीद की एक प्रति है के रूप में plist करने के लिए अतिरिक्त क्षेत्रों को जोड़ने हालांकि आप हमेशा यह सत्यापित करना चाहिए, क्योंकि यह समाप्त हो गया है हो सकता है।

प्रश्न: paymentQueue में: updatedTransactions: प्रेक्षक एक SKPaymentTransactionStateFailed के रूप में के माध्यम से आ रहा है की विधि। मैं इस प्रकार की विफलता और अन्य विफलताओं जैसे कि उपयोगकर्ता को रद्द बटन दबाकर कैसे अंतर कर सकता हूं?

आप विभिन्न प्रकार के प्रतिक्रियाओं को निर्धारित करने के लिए अद्यतन ट्रांज़ेक्शन विधि में एक स्विच स्टेटमेंट का उपयोग करते हैं।

उदाहरण

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 
{  
    NSString *message = [NSString stringWithFormat:@"Transaction failed with error - %@", error.localizedDescription]; 
    NSLog(@"Error - %@", message); 

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" 
                 message:message 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
} 

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    NSLog(@"updatedTransactions"); 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchasing: 
       // take action whilst processing payment 
       break; 

      case SKPaymentTransactionStatePurchased: 
       // take action when feature is purchased 
       break; 

      case SKPaymentTransactionStateRestored: 
       // take action to restore the app as if it was purchased    
       break; 


      case SKPaymentTransactionStateFailed: 
       if (transaction.error.code != SKErrorPaymentCancelled) 
       { 
       // Do something with the error 
       } // end if 
       break; 

      default: 
       break; 
     } // end switch 

    } // next 

TransactionStateFailed विफलताओं संभालती है, हालांकि मुझे रद्द करने के लिए कोड नहीं है के रूप में वहाँ कोई कारण मुझे मेरे एप्लिकेशन में ऐसा करने के लिए है।

प्रश्न: क्या मैं वापस लौटाया गया लेनदेन जमा करता हूं या मुझे पुनर्स्थापित करने की आवश्यकता है पूर्वसंवेदनशीलताएं।

मेरा मानना ​​है कि StoreKit आंतरिक finishTransaction विधि और restorePreviousTransaction तरीकों

यानी के साथ इस संभालती है,

[[SKPaymentQueue defaultQueue] finishTransaction: transaction];

लेनदेन

मुझे आशा है कि इस मदद करता है

बंद खत्म करने के लिए
संबंधित मुद्दे

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