- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了严重的问题,我正在处理应用内购买,当我第一次尝试购买时,它工作正常,第二次我的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/
我遇到了严重的问题,我正在处理应用内购买,当我第一次尝试购买时,它工作正常,第二次我的completeTransaction 调用了两次..我不知道为什么会遇到这个问题。 收到收据后,我调用我的验证方
我有一个问题,即使我打电话[[SKPaymentQueue defaultQueue] finishTransaction: 交易];付款不会从默认队列中删除。 我在默认支付队列上安装了 paymen
应用内购买在我的应用中正常运行。我什至使用自己的服务器来验证交易收据。 但是,我似乎遇到了 SKPaymentQueue TransactionObserver 和/或 DefaultQueue 的问
我正在为 iPhone 应用程序进行应用内购买。 我想在 UILabel 中以用户本地货币显示价格。为此,我需要变量中的价格和货币。 如何使用 SKPayment 获取包含货币的价格? (如果 SKP
我还没有在我的应用程序中完成交易,所以当我尝试使用这个 ID 购买应用程序内时,我收到了这条消息: this in app purchase has already been bought it wi
我想将 SKPayment 交易存储在用户默认设置或设备上,我还想在以后(尚未完成)将交易数据存储在我的服务器上,以便用户可以恢复订阅如果需要/必要/可能的话。 我遇到的问题是我尝试保存到用户默认值,
我们可以分配 skpayment applicationusername 吗? 应用内购买完成后,我在 SKPayment 中得到一个空的 applicationUsername。 如何为 SKPay
关于 SKPayment.applicationUsername,它说 here ... This is used to help the store detect irregular activit
应用内购买的所有教程都使用 SKPayments 类的弃用方法“paymentWithProductIdentifier”。还有其他选择吗? 最佳答案 是的,使用+paymentWithProduct
我正在构建一个带有 IAP(自动续订订阅)的应用程序。工作流程似乎工作正常,IPA 已创建(在 iTunes 连接中),沙盒用户也已登录。IAP 产品 ID 也正确,但我收到错误(来自 SKPayme
如果我需要添加一个事务观察器,以及是否需要删除事务观察器,以及这一切在哪里以及是什么,我都在苦苦挣扎...... 我继承的代码包括带有观察者的应用程序委托(delegate)...AppDelegat
给定一个 SKPaymentTransaction 有没有办法得到 SKProduct? 我正在尝试实现一个通用的 SKPaymentTransactionObserver,它将允许我的应用程序收到发
我是一名优秀的程序员,十分优秀!