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];
लेनदेन
मुझे आशा है कि इस मदद करता है
बंद खत्म करने के लिए