ich einen In-App-Kauf mache, aber ich habe einen Fehler, dass ich nicht finden kann, woher es kommt ...SKPaymentTransactionStatePurchased
Zunächst einmal habe ich einen Knopf und Wenn Sie darauf klicken, meine App Anfrage das Produkt, fängt die Antwort, Sie zahlen, und Sie erhalten das Produkt (alles funktioniert in Ordnung). Aber hier kommt mein Problem. Wenn ich auf den Knopf klicke, um wieder etwas zu kaufen, erhalte ich ZWEI Warnungen, dass ich etwas ZWEI Mal gekauft habe. Selbst wenn ich zum dritten Mal klicke, erhalte ich DREI Warnungen, dass ich etwas DREI Mal gekauft habe und vier und fünf, je nachdem, wie oft ich geklickt habe.
So scheint es, wie einige Variable die Anfragen zu speichern hält .. Hier ist mein Code:
Dieses die Produkt-ID validiert
- (void) validateProductIdentifiers
{
NSString *monedas = @" ID FROM PRODUCT ";
NSSet *product = [NSSet setWithObject:monedas];
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:product];
productsRequest.delegate = self;
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[productsRequest start];
NSLog(@"STARTED REQUEST");
}
Dies die Antwort von Apple Griffe
- (void)productsRequest:(SKProductsRequest *)request
didReceiveResponse:(SKProductsResponse *)response
{
productsRequest=nil;
int found=0;
SKProduct *paraPagar;
skProducts = response.products;
for (SKProduct * skProduct in skProducts) {
NSLog(@"Found product: %@ %@ %0.2f",
skProduct.productIdentifier,
skProduct.localizedTitle,
skProduct.price.floatValue);
found=1;
paraPagar = skProduct;
}
if (found==1){
payment = [SKMutablePayment paymentWithProduct:paraPagar];
payment.quantity = 1;
[[SKPaymentQueue defaultQueue]addPayment:payment];
}else{
//error (not relevant code)
}
}
Zahlung akzeptieren und beenden ing Transaktion
- (void)paymentQueue:(SKPaymentQueue *)queue
updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchased:
NSLog(@"BOUGHT");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
NSLog(@"FAILED");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
[self failedTransaction];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"RESTORED");
//[self restoreTransaction:transaction];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
case SKPaymentTransactionStatePurchasing:
NSLog(@"PURCHASING");
default:
break;
}
}
}
Vielen Dank für Ihre Zeit!
Pro Apples Dokumentation, * "Ihre Anwendung sollte während der Anwendungsinitialisierung einen Beobachter zur Zahlungswarteschlange hinzufügen."* So funktioniert Ihre Lösung, aber noch besser ist es, einmal für Transaktionen zu beobachten, sobald Ihre App startet. – smileyborg