gpt4 book ai didi

iphone - SKPayments 完成交易调用两次

转载 作者:行者123 更新时间:2023-12-03 18:43:24 28 4
gpt4 key购买 nike

我遇到了严重的问题,我正在处理应用内购买,当我第一次尝试购买时,它工作正常,第二次我的completeTransaction 调用了两次..我不知道为什么会遇到这个问题。

收到收据后,我调用我的验证方法,如果验证成功,服务器会在 http 响应中向我发送音频文件,我下载该文件,当我成功下载文件时,我调用 finishtransaction。

这是我的代码

- (void)startPurchase {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
if([SKPaymentQueue canMakePayments]) {
NSLog(@"IN-APP:can make payments");
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:myIdentifier]];
request.delegate = self;
NSLog(@"** Productdata is ** %@",myIdentifier);
[request start];

}
else {
NSLog(@"IN-APP:can't make payments");
loadingHUD.hidden=YES;
}
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

NSLog(@"IN productsRequest END %d",[response.products count]);

@try {
SKProduct *product = [response.products objectAtIndex:0];
SKPayment *newPayment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:newPayment];
NSLog(@"IN-APP:productsRequest END");

loadingHUD.hidden=YES; // Hide the Loading progress bar

}

@catch (NSException *exception) {

// Failed to purchase Hide the progress bar and Display Error Dialog
loadingHUD.hidden=YES;
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"error" message:@"Errror " delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];

}
}

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
}
}
- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
NSLog(@"Transaction Completed");
// Finally, remove the transaction from the payment queue.
[self verifyReceipt:transaction]; // Call the verifyReceipt method to send transaction.bytes
// [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
NSLog(@"Purchase Transaction finish");

}

在下载成功 block 中的VerifyTransaction方法中,我调用完成事务

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{

[[SKPaymentQueue defaultQueue] finishTransaction: transaction]; // Finish the transaction

// NSLog(@"Successfully downloaded file to %@",[[NSString alloc] initWithData:operation.responseData encoding:NSASCIIStringEncoding]);

// Give alert that downloading successful.
NSLog(@"Successfully downloaded file to %@", destPath);

// NSLog(@"response: %@", operation.responseString); // Give alert that downloading successful.

// [self.target parserDidDownloadItem:destPath];

//loadingHUD.detailsLabelText = [NSString stringWithFormat:@"%@ %i%%",@"Downloading",100];
[loadingHUD hide:TRUE];

[DBHelper savePurchaseId:fileName]; // save the purchase itune id into local database to populate hover image of play button on main List
[self movieReceived];

}

最佳答案

看起来您的观察者队列仍然包含旧的产品 ID

- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions
{
NSLog(@"Purchase removedTransactions");

// Release the transaction observer since transaction is finished/removed.
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}

完成交易后删除产品 ID。

关于iphone - SKPayments 完成交易调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18312231/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com