Forse state utilizzando il codice Tutorial di Ray Wunderlich per in App Purchase. C'è il Codice dice:
- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers {
if ((self = [super init])) {
// Store product identifiers
_productIdentifiers = productIdentifiers;
// Check for previously purchased products
_purchasedProductIdentifiers = [NSMutableSet set];
for (NSString * productIdentifier in _productIdentifiers) {
BOOL productPurchased = [[NSUserDefaults standardUserDefaults] boolForKey:productIdentifier];
if (productPurchased) {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; // CHECK THIS
[_purchasedProductIdentifiers addObject:productIdentifier];
NSLog(@"Previously purchased: %@", productIdentifier);
} else {
NSLog(@"Not purchased: %@", productIdentifier);
}
}
Ci si può vedere, che addTransactionObserver viene chiamato solo se il prodotto è già pruchased. Se sposti questa riga di codice davanti alla query if, otterrai il risultato desiderato.
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; // MOVE HERE
if (productPurchased) {
[_purchasedProductIdentifiers addObject:productIdentifier];
NSLog(@"Previously purchased: %@", productIdentifier);
} else {
NSLog(@"Not purchased: %@", productIdentifier);
}
Nel metodo failedTransaction ora è possibile chiamare
[[NSNotificationCenter defaultCenter] postNotificationName:IAPHelperProductPurchasedNotification object:nil userInfo:nil];
Ora è possibile controllare il valore nil inviato dal notifica nel corrente vista
fonte
2013-01-21 13:41:23
Questa è la parte strana su di esso. Quando premo il pulsante Annulla ricevo ancora SKPaymentTransactionStateFailed in paymentQueue: updatedTransactions: metodo e il seguente errore: Errore Domain = SKErrorDomain Code = 2 "Impossibile connettersi a iTunes Store" – dariaa
Questo è sfortunato.Quindi controllerei la connettività Internet utilizzando la classe Reachability di Apple, quindi se disponi di connettività, saprai che è stata annullata o che l'acquisto non è riuscito con il server in qualche modo. Vorrei anche presentare una segnalazione di errore che affermasse che la proprietà dell'errore non funziona come documentato e chiedere una soluzione. –
Questo non è un problema di connettività: per qualche ragione, l'errore è lo stesso quando si annulla la transazione o quando fallisce per qualsiasi altro motivo. – Stavash